IFORM: ABS_advsimd TYPE: instruction XML: abs_advsimd.xml CLASS: sisd FIELDS32: 01|U=0|11110|size=xx|10000|opcode=01011|10|Rn=xxxxx|Rd=xxxxx ENCODING: ABS_asisdmisc_R OPERATION: ABS SYNTAX: , DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); if size != '11' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = esize; integer elements = 1; boolean neg = (U == '1'); CLASS: simd FIELDS32: 0|Q=x|U=0|01110|size=xx|10000|opcode=01011|10|Rn=xxxxx|Rd=xxxxx ENCODING: ABS_asimdmisc_R OPERATION: ABS SYNTAX: .,. DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); if size:Q == '110' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = if Q == '1' then 128 else 64; integer elements = datasize DIV esize; boolean neg = (U == '1'); IFORM: ADC TYPE: instruction XML: adc.xml CLASS: no_s FIELDS32: sf=x|op=0|S=0|11010000|Rm=xxxxx|000000|Rn=xxxxx|Rd=xxxxx ENCODING: ADC_32_addsub_carry OPERATION: ADC SYNTAX: ,, BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADC_64_addsub_carry OPERATION: ADC SYNTAX: ,, BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); IFORM: ADCS TYPE: instruction XML: adcs.xml CLASS: s FIELDS32: sf=x|op=0|S=1|11010000|Rm=xxxxx|000000|Rn=xxxxx|Rd=xxxxx ENCODING: ADCS_32_addsub_carry OPERATION: ADCS SYNTAX: ,, BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADCS_64_addsub_carry OPERATION: ADCS SYNTAX: ,, BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); IFORM: ADDG TYPE: instruction XML: addg.xml CLASS: general ARCH_VARIANT: ARMv8.5 ARCH_FEATURE: FEAT_MTE FIELDS32: sf=1|op=0|S=0|100011|o2=0|uimm6=xxxxxx|op3=(0)(0)|uimm4=xxxx|Xn=xxxxx|Xd=xxxxx ENCODING: ADDG_64_addsub_immtags OPERATION: ADDG SYNTAX: ,, #, # DECODE_PCODE: if !HaveMTEExt() then UNDEFINED; integer d = UInt(Xd); integer n = UInt(Xn); bits(4) tag_offset = uimm4; bits(64) offset = LSL(ZeroExtend(uimm6, 64), LOG2_TAG_GRANULE); boolean ADD = TRUE; IFORM: ADDHN_advsimd TYPE: instruction XML: addhn_advsimd.xml CLASS: 3reg_diff FIELDS32: 0|Q=x|U=0|01110|size=xx|1|Rm=xxxxx|01|o1=0|0|00|Rn=xxxxx|Rd=xxxxx ENCODING: ADDHN_asimddiff_N OPERATION: ADDHN SYNTAX: {2}.,.,. DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); if size == '11' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = 64; integer part = UInt(Q); integer elements = datasize DIV esize; boolean sub_op = (o1 == '1'); boolean round = (U == '1'); IFORM: ADDP_advsimd_pair TYPE: instruction XML: addp_advsimd_pair.xml CLASS: advsimd FIELDS32: 01|U=0|11110|size=xx|11000|opcode=11011|10|Rn=xxxxx|Rd=xxxxx ENCODING: ADDP_asisdpair_only OPERATION: ADDP SYNTAX: ,. DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); if size != '11' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = esize * 2; integer elements = 2; ReduceOp op = ReduceOp_ADD; IFORM: ADDP_advsimd_vec TYPE: instruction XML: addp_advsimd_vec.xml CLASS: 3reg_same FIELDS32: 0|Q=x|U=0|01110|size=xx|1|Rm=xxxxx|opcode=10111|1|Rn=xxxxx|Rd=xxxxx ENCODING: ADDP_asimdsame_only OPERATION: ADDP SYNTAX: .,.,. DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); if size:Q == '110' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = if Q == '1' then 128 else 64; integer elements = datasize DIV esize; IFORM: ADDS_addsub_ext TYPE: instruction XML: adds_addsub_ext.xml ALIAS: CMN_ADDS_addsub_ext Rd == '11111' CLASS: s FIELDS32: sf=x|op=0|S=1|01011|opt=00|1|Rm=xxxxx|option=xxx|imm3=xxx|Rn=xxxxx|Rd=xxxxx ENCODING: ADDS_32S_addsub_ext OPERATION: ADDS SYNTAX: ,,{,{#}} BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADDS_64S_addsub_ext OPERATION: ADDS SYNTAX: ,,{,{#}} BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); ExtendType extend_type = DecodeRegExtend(option); integer shift = UInt(imm3); if shift > 4 then UNDEFINED; IFORM: ADDS_addsub_imm TYPE: instruction XML: adds_addsub_imm.xml ALIAS: CMN_ADDS_addsub_imm Rd == '11111' CLASS: s FIELDS32: sf=x|op=0|S=1|100010|sh=x|imm12=xxxxxxxxxxxx|Rn=xxxxx|Rd=xxxxx ENCODING: ADDS_32S_addsub_imm OPERATION: ADDS SYNTAX: ,, #{,} BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADDS_64S_addsub_imm OPERATION: ADDS SYNTAX: ,, #{,} BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); bits(datasize) imm; case sh of when '0' imm = ZeroExtend(imm12, datasize); when '1' imm = ZeroExtend(imm12 : Zeros(12), datasize); IFORM: ADDS_addsub_shift TYPE: instruction XML: adds_addsub_shift.xml ALIAS: CMN_ADDS_addsub_shift Rd == '11111' CLASS: s FIELDS32: sf=x|op=0|S=1|01011|shift=xx|0|Rm=xxxxx|imm6=xxxxxx|Rn=xxxxx|Rd=xxxxx ENCODING: ADDS_32_addsub_shift OPERATION: ADDS SYNTAX: ,,{,#} BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADDS_64_addsub_shift OPERATION: ADDS SYNTAX: ,,{,#} BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); if shift == '11' then UNDEFINED; if sf == '0' && imm6<5> == '1' then UNDEFINED; ShiftType shift_type = DecodeShift(shift); integer shift_amount = UInt(imm6); IFORM: ADDV_advsimd TYPE: instruction XML: addv_advsimd.xml CLASS: advsimd FIELDS32: 0|Q=x|U=0|01110|size=xx|11000|opcode=11011|10|Rn=xxxxx|Rd=xxxxx ENCODING: ADDV_asimdall_only OPERATION: ADDV SYNTAX: ,. DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); if size:Q == '100' then UNDEFINED; if size == '11' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = if Q == '1' then 128 else 64; integer elements = datasize DIV esize; ReduceOp op = ReduceOp_ADD; IFORM: ADD_addsub_ext TYPE: instruction XML: add_addsub_ext.xml CLASS: no_s FIELDS32: sf=x|op=0|S=0|01011|opt=00|1|Rm=xxxxx|option=xxx|imm3=xxx|Rn=xxxxx|Rd=xxxxx ENCODING: ADD_32_addsub_ext OPERATION: ADD SYNTAX: ,,{,{#}} BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADD_64_addsub_ext OPERATION: ADD SYNTAX: ,,{,{#}} BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); ExtendType extend_type = DecodeRegExtend(option); integer shift = UInt(imm3); if shift > 4 then UNDEFINED; IFORM: ADD_addsub_imm TYPE: instruction XML: add_addsub_imm.xml ALIAS: MOV_ADD_addsub_imm sh == '0' && imm12 == '000000000000' && (Rd == '11111' || Rn == '11111') CLASS: no_s FIELDS32: sf=x|op=0|S=0|100010|sh=x|imm12=xxxxxxxxxxxx|Rn=xxxxx|Rd=xxxxx ENCODING: ADD_32_addsub_imm OPERATION: ADD SYNTAX: ,, #{,} BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADD_64_addsub_imm OPERATION: ADD SYNTAX: ,, #{,} BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); bits(datasize) imm; case sh of when '0' imm = ZeroExtend(imm12, datasize); when '1' imm = ZeroExtend(imm12 : Zeros(12), datasize); IFORM: ADD_addsub_shift TYPE: instruction XML: add_addsub_shift.xml CLASS: no_s FIELDS32: sf=x|op=0|S=0|01011|shift=xx|0|Rm=xxxxx|imm6=xxxxxx|Rn=xxxxx|Rd=xxxxx ENCODING: ADD_32_addsub_shift OPERATION: ADD SYNTAX: ,,{,#} BITDIFFS: sf == '0' LABEL: 32-bit ENCODING: ADD_64_addsub_shift OPERATION: ADD SYNTAX: ,,{,#} BITDIFFS: sf == '1' LABEL: 64-bit DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); integer datasize = if sf == '1' then 64 else 32; boolean sub_op = (op == '1'); boolean setflags = (S == '1'); if shift == '11' then UNDEFINED; if sf == '0' && imm6<5> == '1' then UNDEFINED; ShiftType shift_type = DecodeShift(shift); integer shift_amount = UInt(imm6); IFORM: ADD_advsimd TYPE: instruction XML: add_advsimd.xml CLASS: sisd FIELDS32: 01|U=0|11110|size=xx|1|Rm=xxxxx|opcode=10000|1|Rn=xxxxx|Rd=xxxxx ENCODING: ADD_asisdsame_only OPERATION: ADD SYNTAX: ,, DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); if size != '11' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = esize; integer elements = 1; boolean sub_op = (U == '1'); CLASS: simd FIELDS32: 0|Q=x|U=0|01110|size=xx|1|Rm=xxxxx|opcode=10000|1|Rn=xxxxx|Rd=xxxxx ENCODING: ADD_asimdsame_only OPERATION: ADD SYNTAX: .,.,. DECODE_PCODE: integer d = UInt(Rd); integer n = UInt(Rn); integer m = UInt(Rm); if size:Q == '110' then UNDEFINED; integer esize = 8 << UInt(size); integer datasize = if Q == '1' then 128 else 64; integer elements = datasize DIV esize; boolean sub_op = (U == '1'); IFORM: ADR TYPE: instruction XML: adr.xml CLASS: literal FIELDS32: op=0|immlo=xx|10000|immhi=xxxxxxxxxxxxxxxxxxx|Rd=xxxxx ENCODING: ADR_only_pcreladdr OPERATION: ADR SYNTAX: ,