summaryrefslogtreecommitdiff
path: root/aarch64/no_vector/decode.sail
diff options
context:
space:
mode:
authorAlasdair Armstrong2018-01-17 16:17:19 +0000
committerAlasdair Armstrong2018-01-17 16:17:19 +0000
commit254b72f60388271058c6d259d5a98424e94cafc7 (patch)
treeb3fc71b47ddefe267336d4c0b460f4535b42cd7a /aarch64/no_vector/decode.sail
parent53af9ce7a683ee4542b8facc44edfd1e3ef64cf6 (diff)
Add generated ARM spec and test cases for it
We add the generated ARM no_vector spec from the public v8.3 XML release, mostly so that we can add end-to-end test cases for sail using it. This kind of large example is very useful for thoroughly testing the sail compiler and interpreter.
Diffstat (limited to 'aarch64/no_vector/decode.sail')
-rw-r--r--aarch64/no_vector/decode.sail1139
1 files changed, 1139 insertions, 0 deletions
diff --git a/aarch64/no_vector/decode.sail b/aarch64/no_vector/decode.sail
new file mode 100644
index 00000000..a37b064a
--- /dev/null
+++ b/aarch64/no_vector/decode.sail
@@ -0,0 +1,1139 @@
+function clause decode 0b10011011 @ _ : bits(1) @ 0b10 @ _ : bits(5) @ 0b0 @ _ : bits(15) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op54 : bits(2) = op_code[30 .. 29];
+ U : bits(1) = [op_code[23]];
+ Rm : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Ra : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_mul_widening_64128hi_decode(sf, op54, U, Rm, o0, Ra, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b1010001 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_general_postidx_aarch64_memory_pair_general_postidx__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b1010011 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_general_preidx_aarch64_memory_pair_general_postidx__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b1010010 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_general_offset_aarch64_memory_pair_general_postidx__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111100 @ _ : bits(2) @ 0b1 @ _ : bits(9) @ 0b10 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ option_name : bits(3) = op_code[15 .. 13];
+ S : bits(1) = [op_code[12]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_simdfp_register_aarch64_memory_single_simdfp_register__decode(size, V, opc, Rm, option_name, S, Rn, Rt)
+}
+
+function clause decode 0b00011111 @ _ : bits(24) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ o1 : bits(1) = [op_code[21]];
+ Rm : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Ra : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_arithmetic_mul_addsub_decode(M, S, typ, o1, Rm, o0, Ra, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b1 @ _ : bits(5) @ 0b0 @ _ : bits(3) @ 0b00 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ A : bits(1) = [op_code[23]];
+ R : bits(1) = [op_code[22]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o3 : bits(1) = [op_code[15]];
+ opc : bits(3) = op_code[14 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_atomicops_ld_decode(size, V, A, R, Rs, o3, opc, Rn, Rt)
+}
+
+function clause decode 0b110110101100000101000 @ _ : bits(11) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ D : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_strip_dp_1src_decode(sf, S, opcode2, D, Rn, Rd)
+}
+
+function clause decode 0b11010101000000110010000011111111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ integer_pac_strip_hint_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b010 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_pacda_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode 0b11010101000000110011 @ _ : bits(4) @ 0b01011111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ system_monitors_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b0 @ _ : bits(9) @ 0b00 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm9 : bits(9) = op_code[20 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_immediate_signed_offset_normal_aarch64_memory_single_general_immediate_signed_offset_normal__decode(size, V, opc, imm9, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b1010000 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_general_noalloc_aarch64_memory_pair_general_noalloc__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(6) @ 0b00010 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ op : bits(1) = [op_code[15]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_arithmetic_mul_product_decode(M, S, typ, Rm, op, Rn, Rd)
+}
+
+function clause decode 0b10011010110 @ _ : bits(5) @ 0b001100 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ Rm : bits(5) = op_code[20 .. 16];
+ opcode2 : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_pacga_dp_2src_decode(sf, op, S, Rm, opcode2, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b0010001 @ _ : bits(1) @ 0b1 @ _ : bits(6) @ 0b11111 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ o2 : bits(1) = [op_code[23]];
+ L : bits(1) = [op_code[22]];
+ o1 : bits(1) = [op_code[21]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_atomicops_cas_single_decode(size, o2, L, o1, Rs, o0, Rt2, Rn, Rt)
+}
+
+function clause decode 0b1101010100000 @ _ : bits(3) @ 0b0100 @ _ : bits(7) @ 0b11111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ system_register_cpsr_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode 0b01010100 @ _ : bits(19) @ 0b0 @ _ : bits(4) as op_code = {
+ o1 : bits(1) = [op_code[24]];
+ imm19 : bits(19) = op_code[23 .. 5];
+ o0 : bits(1) = [op_code[4]];
+ cond : bits(4) = op_code[3 .. 0];
+ branch_conditional_cond_decode(o1, imm19, o0, cond)
+}
+
+function clause decode 0b11010100000 @ _ : bits(16) @ 0b00010 as op_code = {
+ opc : bits(3) = op_code[23 .. 21];
+ imm16 : bits(16) = op_code[20 .. 5];
+ op2 : bits(3) = op_code[4 .. 2];
+ LL : bits(2) = op_code[1 .. 0];
+ system_exceptions_runtime_hvc_decode(opc, imm16, op2, LL)
+}
+
+function clause decode 0b1 @ _ : bits(1) @ 0b0010000 @ _ : bits(1) @ 0b1 @ _ : bits(21) as op_code = {
+ sz : bits(1) = [op_code[30]];
+ o2 : bits(1) = [op_code[23]];
+ L : bits(1) = [op_code[22]];
+ o1 : bits(1) = [op_code[21]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_exclusive_pair_decode(sz, o2, L, o1, Rs, o0, Rt2, Rn, Rt)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b111 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_autdb_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode _ : bits(1) @ 0b101101011000000000000 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_rbit_decode(sf, S, opcode2, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b111001 @ _ : bits(24) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm12 : bits(12) = op_code[21 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_immediate_unsigned_aarch64_memory_single_general_immediate_unsigned__decode(size, V, opc, imm12, Rn, Rt)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b100 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_autia_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode 0b11010101000000110010 @ _ : bits(7) @ 0b11111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ integer_pac_autia_hint_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode 0b11010100000 @ _ : bits(16) @ 0b00001 as op_code = {
+ opc : bits(3) = op_code[23 .. 21];
+ imm16 : bits(16) = op_code[20 .. 5];
+ op2 : bits(3) = op_code[4 .. 2];
+ LL : bits(2) = op_code[1 .. 0];
+ system_exceptions_runtime_svc_decode(opc, imm16, op2, LL)
+}
+
+function clause decode 0b1101011 @ _ : bits(1) @ 0b0 @ _ : bits(2) @ 0b111110000 @ _ : bits(12) as op_code = {
+ Z : bits(1) = [op_code[24]];
+ opc : bits(1) = [op_code[23]];
+ op : bits(2) = op_code[22 .. 21];
+ op2 : bits(5) = op_code[20 .. 16];
+ op3 : bits(4) = op_code[15 .. 12];
+ A : bits(1) = [op_code[11]];
+ M : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rm : bits(5) = op_code[4 .. 0];
+ branch_unconditional_register_decode(Z, opc, op, op2, op3, A, M, Rn, Rm)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(8) @ 0b10000000 @ _ : bits(5) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ imm8 : bits(8) = op_code[20 .. 13];
+ imm5 : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_move_fp_imm_decode(M, S, typ, imm8, imm5, Rd)
+}
+
+function clause decode _ : bits(1) @ 0b011011 @ _ : bits(25) as op_code = {
+ b5 : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[24]];
+ b40 : bits(5) = op_code[23 .. 19];
+ imm14 : bits(14) = op_code[18 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ branch_conditional_test_decode(b5, op, b40, imm14, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b0 @ _ : bits(9) @ 0b01 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm9 : bits(9) = op_code[20 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_immediate_signed_postidx_aarch64_memory_single_general_immediate_signed_postidx__decode(size, V, opc, imm9, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b0 @ _ : bits(9) @ 0b11 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm9 : bits(9) = op_code[20 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_immediate_signed_preidx_aarch64_memory_single_general_immediate_signed_postidx__decode(size, V, opc, imm9, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111001 @ _ : bits(24) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm12 : bits(12) = op_code[21 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_immediate_unsigned_aarch64_memory_single_general_immediate_signed_postidx__decode(size, V, opc, imm12, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b011000 @ _ : bits(24) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ imm19 : bits(19) = op_code[23 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_literal_general_decode(opc, V, imm19, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b1011001 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_simdfp_postidx_aarch64_memory_pair_simdfp_postidx__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b1011011 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_simdfp_preidx_aarch64_memory_pair_simdfp_postidx__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b1011010 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_simdfp_offset_aarch64_memory_pair_simdfp_postidx__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(1) @ 0b011010 @ _ : bits(25) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[24]];
+ imm19 : bits(19) = op_code[23 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ branch_conditional_compare_decode(sf, op, imm19, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111100 @ _ : bits(2) @ 0b0 @ _ : bits(9) @ 0b00 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm9 : bits(9) = op_code[20 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_simdfp_immediate_signed_offset_normal_aarch64_memory_single_simdfp_immediate_signed_offset_normal__decode(size, V, opc, imm9, Rn, Rt)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b001 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_pacib_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode 0b11010101000000110010 @ _ : bits(7) @ 0b11111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ integer_pac_pacib_hint_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111100 @ _ : bits(2) @ 0b0 @ _ : bits(9) @ 0b01 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm9 : bits(9) = op_code[20 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_simdfp_immediate_signed_postidx_aarch64_memory_single_simdfp_immediate_signed_postidx__decode(size, V, opc, imm9, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111100 @ _ : bits(2) @ 0b0 @ _ : bits(9) @ 0b11 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm9 : bits(9) = op_code[20 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_simdfp_immediate_signed_preidx_aarch64_memory_single_simdfp_immediate_signed_postidx__decode(size, V, opc, imm9, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111101 @ _ : bits(24) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm12 : bits(12) = op_code[21 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_simdfp_immediate_unsigned_aarch64_memory_single_simdfp_immediate_signed_postidx__decode(size, V, opc, imm12, Rn, Rt)
+}
+
+function clause decode 0b0 @ _ : bits(1) @ 0b0011000 @ _ : bits(1) @ 0b000000 @ _ : bits(16) as op_code = {
+ Q : bits(1) = [op_code[30]];
+ L : bits(1) = [op_code[22]];
+ opcode : bits(4) = op_code[15 .. 12];
+ size : bits(2) = op_code[11 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_vector_multiple_nowb_aarch64_memory_vector_multiple_nowb__decode(Q, L, opcode, size, Rn, Rt)
+}
+
+function clause decode 0b0 @ _ : bits(1) @ 0b0011001 @ _ : bits(1) @ 0b0 @ _ : bits(21) as op_code = {
+ Q : bits(1) = [op_code[30]];
+ L : bits(1) = [op_code[22]];
+ Rm : bits(5) = op_code[20 .. 16];
+ opcode : bits(4) = op_code[15 .. 12];
+ size : bits(2) = op_code[11 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_vector_multiple_postinc_aarch64_memory_vector_multiple_nowb__decode(Q, L, Rm, opcode, size, Rn, Rt)
+}
+
+function clause decode 0b11010110100111110000 @ _ : bits(12) as op_code = {
+ opc : bits(4) = op_code[24 .. 21];
+ op2 : bits(5) = op_code[20 .. 16];
+ op3 : bits(4) = op_code[15 .. 12];
+ A : bits(1) = [op_code[11]];
+ M : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ op4 : bits(5) = op_code[4 .. 0];
+ branch_unconditional_eret_decode(opc, op2, op3, A, M, Rn, op4)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(5) @ 0b01 @ _ : bits(2) @ 0b10 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ op : bits(2) = op_code[13 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_arithmetic_maxmin_decode(M, S, typ, Rm, op, Rn, Rd)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b10000 @ _ : bits(2) @ 0b10000 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ opc : bits(2) = op_code[16 .. 15];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_arithmetic_unary_decode(M, S, typ, opc, Rn, Rd)
+}
+
+function clause decode 0b11010100000 @ _ : bits(16) @ 0b00011 as op_code = {
+ opc : bits(3) = op_code[23 .. 21];
+ imm16 : bits(16) = op_code[20 .. 5];
+ op2 : bits(3) = op_code[4 .. 2];
+ LL : bits(2) = op_code[1 .. 0];
+ system_exceptions_runtime_smc_decode(opc, imm16, op2, LL)
+}
+
+function clause decode _ : bits(2) @ 0b0010001 @ _ : bits(1) @ 0b0 @ _ : bits(21) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ o2 : bits(1) = [op_code[23]];
+ L : bits(1) = [op_code[22]];
+ o1 : bits(1) = [op_code[21]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_ordered_decode(size, o2, L, o1, Rs, o0, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b1 @ _ : bits(9) @ 0b10 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ option_name : bits(3) = op_code[15 .. 13];
+ S : bits(1) = [op_code[12]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_register_aarch64_memory_single_general_register__decode(size, V, opc, Rm, option_name, S, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b1011000 @ _ : bits(23) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ L : bits(1) = [op_code[22]];
+ imm7 : bits(7) = op_code[21 .. 15];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_pair_simdfp_noalloc_aarch64_memory_pair_simdfp_noalloc__decode(opc, V, L, imm7, Rt2, Rn, Rt)
+}
+
+function clause decode 0b11010100001 @ _ : bits(16) @ 0b00000 as op_code = {
+ opc : bits(3) = op_code[23 .. 21];
+ imm16 : bits(16) = op_code[20 .. 5];
+ op2 : bits(3) = op_code[4 .. 2];
+ LL : bits(2) = op_code[1 .. 0];
+ system_exceptions_debug_breakpoint_decode(opc, imm16, op2, LL)
+}
+
+function clause decode _ : bits(1) @ 0b0011011000 @ _ : bits(21) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op54 : bits(2) = op_code[30 .. 29];
+ op31 : bits(3) = op_code[23 .. 21];
+ Rm : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Ra : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_mul_uniform_addsub_decode(sf, op54, op31, Rm, o0, Ra, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b011100 @ _ : bits(24) as op_code = {
+ opc : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ imm19 : bits(19) = op_code[23 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_literal_simdfp_decode(opc, V, imm19, Rt)
+}
+
+function clause decode 0b1101010100 @ _ : bits(1) @ 0b01 @ _ : bits(19) as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ system_sysops_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode _ : bits(3) @ 0b01011 @ _ : bits(2) @ 0b0 @ _ : bits(21) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ shift : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ imm6 : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_addsub_shiftedreg_decode(sf, op, S, shift, Rm, imm6, Rn, Rd)
+}
+
+function clause decode _ : bits(3) @ 0b100100 @ _ : bits(23) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ opc : bits(2) = op_code[30 .. 29];
+ N : bits(1) = [op_code[22]];
+ immr : bits(6) = op_code[21 .. 16];
+ imms : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_logical_immediate_decode(sf, opc, N, immr, imms, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b111010010 @ _ : bits(9) @ 0b00 @ _ : bits(5) @ 0b0 @ _ : bits(4) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ Rm : bits(5) = op_code[20 .. 16];
+ cond : bits(4) = op_code[15 .. 12];
+ o2 : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ o3 : bits(1) = [op_code[4]];
+ nzcv : bits(4) = op_code[3 .. 0];
+ integer_conditional_compare_register_decode(sf, op, S, Rm, cond, o2, Rn, o3, nzcv)
+}
+
+function clause decode _ : bits(3) @ 0b100110 @ _ : bits(23) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ opc : bits(2) = op_code[30 .. 29];
+ N : bits(1) = [op_code[22]];
+ immr : bits(6) = op_code[21 .. 16];
+ imms : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_bitfield_decode(sf, opc, N, immr, imms, Rn, Rd)
+}
+
+function clause decode 0b1101010100 @ _ : bits(1) @ 0b1 @ _ : bits(20) as op_code = {
+ L : bits(1) = [op_code[21]];
+ o0 : bits(1) = [op_code[19]];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ system_register_system_decode(L, o0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111010010 @ _ : bits(9) @ 0b10 @ _ : bits(5) @ 0b0 @ _ : bits(4) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ imm5 : bits(5) = op_code[20 .. 16];
+ cond : bits(4) = op_code[15 .. 12];
+ o2 : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ o3 : bits(1) = [op_code[4]];
+ nzcv : bits(4) = op_code[3 .. 0];
+ integer_conditional_compare_immediate_decode(sf, op, S, imm5, cond, o2, Rn, o3, nzcv)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(5) @ 0b000110 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_arithmetic_div_decode(M, S, typ, Rm, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b1 @ _ : bits(5) @ 0b100000 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ A : bits(1) = [op_code[23]];
+ R : bits(1) = [op_code[22]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o3 : bits(1) = [op_code[15]];
+ opc : bits(3) = op_code[14 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_atomicops_swp_decode(size, V, A, R, Rs, o3, opc, Rn, Rt)
+}
+
+function clause decode _ : bits(3) @ 0b10001 @ _ : bits(24) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ shift : bits(2) = op_code[23 .. 22];
+ imm12 : bits(12) = op_code[21 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_addsub_immediate_decode(sf, op, S, shift, imm12, Rn, Rd)
+}
+
+function clause decode _ : bits(1) @ 0b00101 @ _ : bits(26) as op_code = {
+ op : bits(1) = [op_code[31]];
+ imm26 : bits(26) = op_code[25 .. 0];
+ branch_unconditional_immediate_decode(op, imm26)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b110 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_autda_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode _ : bits(1) @ 0b10110101100000000010 @ _ : bits(11) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ op : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_cnt_decode(sf, S, opcode2, op, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b111 @ _ : bits(1) @ 0b00 @ _ : bits(2) @ 0b1 @ _ : bits(9) @ 0b00 @ _ : bits(5) @ 0b11111 as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ A : bits(1) = [op_code[23]];
+ R : bits(1) = [op_code[22]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o3 : bits(1) = [op_code[15]];
+ opc : bits(3) = op_code[14 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_atomicops_st_decode(size, V, A, R, Rs, o3, opc, Rn, Rt)
+}
+
+function clause decode 0b11010101000000110011 @ _ : bits(4) @ 0b1 @ _ : bits(2) @ 0b11111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ opc : bits(2) = op_code[6 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ system_barriers_decode(L, op0, op1, CRn, CRm, opc, Rt)
+}
+
+function clause decode 0b0 @ _ : bits(1) @ 0b0010000 @ _ : bits(1) @ 0b1 @ _ : bits(21) as op_code = {
+ sz : bits(1) = [op_code[30]];
+ o2 : bits(1) = [op_code[23]];
+ L : bits(1) = [op_code[22]];
+ o1 : bits(1) = [op_code[21]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_atomicops_cas_pair_decode(sz, o2, L, o1, Rs, o0, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(3) @ 0b100101 @ _ : bits(23) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ opc : bits(2) = op_code[30 .. 29];
+ hw : bits(2) = op_code[22 .. 21];
+ imm16 : bits(16) = op_code[20 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_insext_insert_movewide_decode(sf, opc, hw, imm16, Rd)
+}
+
+function clause decode 0b11010110101111110000001111100000 as op_code = {
+ opc : bits(4) = op_code[24 .. 21];
+ op2 : bits(5) = op_code[20 .. 16];
+ op3 : bits(6) = op_code[15 .. 10];
+ Rt : bits(5) = op_code[9 .. 5];
+ op4 : bits(5) = op_code[4 .. 0];
+ branch_unconditional_dret_decode(opc, op2, op3, Rt, op4)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(9) @ 0b11 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ cond : bits(4) = op_code[15 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_move_fp_select_decode(M, S, typ, Rm, cond, Rn, Rd)
+}
+
+function clause decode 0b11010100101 @ _ : bits(16) @ 0b000 @ _ : bits(2) as op_code = {
+ opc : bits(3) = op_code[23 .. 21];
+ imm16 : bits(16) = op_code[20 .. 5];
+ op2 : bits(3) = op_code[4 .. 2];
+ LL : bits(2) = op_code[1 .. 0];
+ system_exceptions_debug_exception_decode(opc, imm16, op2, LL)
+}
+
+function clause decode _ : bits(1) @ 0b1011010110000000000 @ _ : bits(12) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ opc : bits(2) = op_code[11 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_rev_decode(sf, S, opcode2, opc, Rn, Rd)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b10001 @ _ : bits(2) @ 0b10000 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ opc : bits(2) = op_code[16 .. 15];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_convert_fp_decode(M, S, typ, opc, Rn, Rd)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b000 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_pacia_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode 0b11010101000000110010 @ _ : bits(7) @ 0b11111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ integer_pac_pacia_hint_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode _ : bits(1) @ 0b0011110 @ _ : bits(2) @ 0b1 @ _ : bits(5) @ 0b000000 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ rmode : bits(2) = op_code[20 .. 19];
+ opcode : bits(3) = op_code[18 .. 16];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_convert_int_decode(sf, S, typ, rmode, opcode, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b011010100 @ _ : bits(9) @ 0b0 @ _ : bits(11) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ Rm : bits(5) = op_code[20 .. 16];
+ cond : bits(4) = op_code[15 .. 12];
+ o2 : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_conditional_select_decode(sf, op, S, Rm, cond, o2, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b111000101 @ _ : bits(5) @ 0b110000 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ A : bits(1) = [op_code[23]];
+ R : bits(1) = [op_code[22]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o3 : bits(1) = [op_code[15]];
+ opc : bits(3) = op_code[14 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_orderedrcpc_decode(size, V, A, R, Rs, o3, opc, Rn, Rt)
+}
+
+function clause decode _ : bits(3) @ 0b01011001 @ _ : bits(21) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ opt : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ option_name : bits(3) = op_code[15 .. 13];
+ imm3 : bits(3) = op_code[12 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_addsub_extendedreg_decode(sf, op, S, opt, Rm, option_name, imm3, Rn, Rd)
+}
+
+function clause decode _ : bits(3) @ 0b10000 @ _ : bits(24) as op_code = {
+ op : bits(1) = [op_code[31]];
+ immlo : bits(2) = op_code[30 .. 29];
+ immhi : bits(19) = op_code[23 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_address_pcrel_decode(op, immlo, immhi, Rd)
+}
+
+function clause decode 0b0 @ _ : bits(1) @ 0b0011010 @ _ : bits(2) @ 0b00000 @ _ : bits(16) as op_code = {
+ Q : bits(1) = [op_code[30]];
+ L : bits(1) = [op_code[22]];
+ R : bits(1) = [op_code[21]];
+ opcode : bits(3) = op_code[15 .. 13];
+ S : bits(1) = [op_code[12]];
+ size : bits(2) = op_code[11 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_vector_single_nowb_aarch64_memory_vector_single_nowb__decode(Q, L, R, opcode, S, size, Rn, Rt)
+}
+
+function clause decode 0b0 @ _ : bits(1) @ 0b0011011 @ _ : bits(23) as op_code = {
+ Q : bits(1) = [op_code[30]];
+ L : bits(1) = [op_code[22]];
+ R : bits(1) = [op_code[21]];
+ Rm : bits(5) = op_code[20 .. 16];
+ opcode : bits(3) = op_code[15 .. 13];
+ S : bits(1) = [op_code[12]];
+ size : bits(2) = op_code[11 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_vector_single_postinc_aarch64_memory_vector_single_nowb__decode(Q, L, R, Rm, opcode, S, size, Rn, Rt)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b1 @ _ : bits(10) @ 0b1 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ M : bits(1) = [op_code[23]];
+ S : bits(1) = [op_code[22]];
+ imm9 : bits(9) = op_code[20 .. 12];
+ W : bits(1) = [op_code[11]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_immediate_signed_pac_decode(size, V, M, S, imm9, W, Rn, Rt)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b101 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_autib_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode 0b11010101000000110010 @ _ : bits(7) @ 0b11111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ integer_pac_autib_hint_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(9) @ 0b01 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ cond : bits(4) = op_code[15 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ op : bits(1) = [op_code[4]];
+ nzcv : bits(4) = op_code[3 .. 0];
+ float_compare_cond_decode(M, S, typ, Rm, cond, Rn, op, nzcv)
+}
+
+function clause decode _ : bits(2) @ 0b0010000 @ _ : bits(1) @ 0b0 @ _ : bits(21) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ o2 : bits(1) = [op_code[23]];
+ L : bits(1) = [op_code[22]];
+ o1 : bits(1) = [op_code[21]];
+ Rs : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Rt2 : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_exclusive_single_decode(size, o2, L, o1, Rs, o0, Rt2, Rn, Rt)
+}
+
+function clause decode _ : bits(1) @ 0b0011110 @ _ : bits(2) @ 0b0 @ _ : bits(21) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ rmode : bits(2) = op_code[20 .. 19];
+ opcode : bits(3) = op_code[18 .. 16];
+ scale : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_convert_fix_decode(sf, S, typ, rmode, opcode, scale, Rn, Rd)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1001 @ _ : bits(3) @ 0b10000 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ rmode : bits(3) = op_code[17 .. 15];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_arithmetic_round_decode(M, S, typ, rmode, Rn, Rd)
+}
+
+function clause decode _ : bits(3) @ 0b01010 @ _ : bits(24) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ opc : bits(2) = op_code[30 .. 29];
+ shift : bits(2) = op_code[23 .. 22];
+ N : bits(1) = [op_code[21]];
+ Rm : bits(5) = op_code[20 .. 16];
+ imm6 : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_logical_shiftedreg_decode(sf, opc, shift, N, Rm, imm6, Rn, Rd)
+}
+
+function clause decode _ : bits(1) @ 0b0011010110 @ _ : bits(5) @ 0b010 @ _ : bits(13) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ Rm : bits(5) = op_code[20 .. 16];
+ opcode2 : bits(3) = op_code[15 .. 13];
+ C : bits(1) = [op_code[12]];
+ sz : bits(2) = op_code[11 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_crc_decode(sf, op, S, Rm, opcode2, C, sz, Rn, Rd)
+}
+
+function clause decode _ : bits(3) @ 0b11010000 @ _ : bits(5) @ 0b000000 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ Rm : bits(5) = op_code[20 .. 16];
+ opcode2 : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_addsub_carry_decode(sf, op, S, Rm, opcode2, Rn, Rd)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(5) @ 0b001000 @ _ : bits(7) @ 0b000 as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ op : bits(2) = op_code[15 .. 14];
+ Rn : bits(5) = op_code[9 .. 5];
+ opc : bits(2) = op_code[4 .. 3];
+ float_compare_uncond_decode(M, S, typ, Rm, op, Rn, opc)
+}
+
+function clause decode 0b11010101000000110010 @ _ : bits(7) @ 0b11111 as op_code = {
+ L : bits(1) = [op_code[21]];
+ op0 : bits(2) = op_code[20 .. 19];
+ op1 : bits(3) = op_code[18 .. 16];
+ CRn : bits(4) = op_code[15 .. 12];
+ CRm : bits(4) = op_code[11 .. 8];
+ op2 : bits(3) = op_code[7 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ system_hints_decode(L, op0, op1, CRn, CRm, op2, Rt)
+}
+
+function clause decode _ : bits(1) @ 0b0011010110 @ _ : bits(5) @ 0b0010 @ _ : bits(12) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ Rm : bits(5) = op_code[20 .. 16];
+ opcode2 : bits(4) = op_code[15 .. 12];
+ op2 : bits(2) = op_code[11 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_shift_variable_decode(sf, op, S, Rm, opcode2, op2, Rn, Rd)
+}
+
+function clause decode 0b110110101100000100 @ _ : bits(1) @ 0b011 @ _ : bits(10) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ opcode2 : bits(5) = op_code[20 .. 16];
+ Z : bits(1) = [op_code[13]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_pac_pacdb_dp_1src_decode(sf, S, opcode2, Z, Rn, Rd)
+}
+
+function clause decode _ : bits(2) @ 0b111000 @ _ : bits(2) @ 0b0 @ _ : bits(9) @ 0b10 @ _ : bits(10) as op_code = {
+ size : bits(2) = op_code[31 .. 30];
+ V : bits(1) = [op_code[26]];
+ opc : bits(2) = op_code[23 .. 22];
+ imm9 : bits(9) = op_code[20 .. 12];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rt : bits(5) = op_code[4 .. 0];
+ memory_single_general_immediate_signed_offset_unpriv_aarch64_memory_single_general_immediate_signed_offset_unpriv__decode(size, V, opc, imm9, Rn, Rt)
+}
+
+function clause decode 0b00011110 @ _ : bits(2) @ 0b1 @ _ : bits(5) @ 0b001 @ _ : bits(1) @ 0b10 @ _ : bits(10) as op_code = {
+ M : bits(1) = [op_code[31]];
+ S : bits(1) = [op_code[29]];
+ typ : bits(2) = op_code[23 .. 22];
+ Rm : bits(5) = op_code[20 .. 16];
+ op : bits(1) = [op_code[12]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ float_arithmetic_addsub_decode(M, S, typ, Rm, op, Rn, Rd)
+}
+
+function clause decode _ : bits(1) @ 0b00100111 @ _ : bits(1) @ 0b0 @ _ : bits(21) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op21 : bits(2) = op_code[30 .. 29];
+ N : bits(1) = [op_code[22]];
+ o0 : bits(1) = [op_code[21]];
+ Rm : bits(5) = op_code[20 .. 16];
+ imms : bits(6) = op_code[15 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_insext_extract_immediate_decode(sf, op21, N, o0, Rm, imms, Rn, Rd)
+}
+
+function clause decode 0b11010100010 @ _ : bits(16) @ 0b00000 as op_code = {
+ opc : bits(3) = op_code[23 .. 21];
+ imm16 : bits(16) = op_code[20 .. 5];
+ op2 : bits(3) = op_code[4 .. 2];
+ LL : bits(2) = op_code[1 .. 0];
+ system_exceptions_debug_halt_decode(opc, imm16, op2, LL)
+}
+
+function clause decode 0b10011011 @ _ : bits(1) @ 0b01 @ _ : bits(21) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op54 : bits(2) = op_code[30 .. 29];
+ U : bits(1) = [op_code[23]];
+ Rm : bits(5) = op_code[20 .. 16];
+ o0 : bits(1) = [op_code[15]];
+ Ra : bits(5) = op_code[14 .. 10];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_mul_widening_3264_decode(sf, op54, U, Rm, o0, Ra, Rn, Rd)
+}
+
+function clause decode _ : bits(1) @ 0b0011010110 @ _ : bits(5) @ 0b00001 @ _ : bits(11) as op_code = {
+ sf : bits(1) = [op_code[31]];
+ op : bits(1) = [op_code[30]];
+ S : bits(1) = [op_code[29]];
+ Rm : bits(5) = op_code[20 .. 16];
+ opcode2 : bits(5) = op_code[15 .. 11];
+ o1 : bits(1) = [op_code[10]];
+ Rn : bits(5) = op_code[9 .. 5];
+ Rd : bits(5) = op_code[4 .. 0];
+ integer_arithmetic_div_decode(sf, op, S, Rm, opcode2, o1, Rn, Rd)
+}