Instruction Set Architecture » History » Revision 3
Revision 2 (Alexander Protsenko, 03/15/2023 06:59 PM) → Revision 3/17 (Alexander Protsenko, 03/15/2023 07:22 PM)
h1. Instruction Set Architecture h2. Data processing - immediate h3. Arithmetic (immediate) ### ADD (immediate). Add. Specification: add, add_32 ### SUB (immediate). Subtract. Specification: sub, sub_32 ### ADDS (immediate). Add and set flags. Specification: adds, adds_32 ### SUBS (immediate). Subtract and set flags. Specification: subs, subs_32 ### CMP (immediate). Compare. Specification: cmp, cmp_32 ### CMN (immediate). Compare negative. Specification: cmn, cmn_32 [2]: mov_sp [3]: mov_sp_32 h3. Logical (immediate) ### AND (immediate). Bitwise AND Specification: and_bitmask, and_bitmask_32 ### ANDS (immediate). Bitwise AND and set flags Specification: ands_bitmask, ands_bitmask_32 ### EOR (immediate). Bitwise exclusive OR Specification: eor_bitmask, eor_bitmask_32 ### ORR (immediate). Bitwise inclusive OR Specification: orr_bitmask, orr_bitmask_32 ### TST (immediate). TST Test bits Specification: tst_bitmask, tst_bitmask_32 h3. Move (wide immediate) ### MOVZ. Move wide with zero Specification: movz, movz_32 ### MOVN. Move wide with NOT Specification: movn, movn_32 ### MOVK. Move wide with keep Specification: movk, movk_32 h3. Move (immediate) ### MOV (wide immediate). Move (wide immediate) Specification: mov_wide_imm, mov_wide_imm_32 ### MOV (inverted wide immediate). Move (inverted wide immediate) Specification: mov_inv_wide_imm, mov_inv_wide_imm_32 ### MOV (bitmask immediate). Move (bitmask immediate) Specification: mov_bitmask, mov_bitmask_32 h3. PC-relative address calculation ### ADRP. Compute address of 4KB page at a PC-relative offset Specification: [43]: adrp ### ADR. Compute address of label at a PC-relative offset. Specification: [44]: adr h3. Extract register ### EXTR. Extract register from pair Specification: extr, [45]: extr [46]: extr_32 h2. Data processing - register h3. Arithmetic (shifted register) ### ADD (shifted register). Add Specification: add_sh_reg, [47]: madd [48]: madd_32 [49]: msub [50]: msub_32 [51]: mneg [52]: mneg_32 [53]: mul [54]: mul_32 [55]: smaddl [56]: smsubl [57]: smnegl [58]: smull [59]: smulh [60]: umaddl [61]: umsubl [62]: umnegl [63]: umull [64]: umulh [65]: sdiv [66]: sdiv_32 [67]: udiv [68]: udiv_32 [69]: add_sh_reg [70]: add_sh_reg_32 ### ADDS (shifted register). Add and set flags [71]: adds_sh_reg Specification: adds_sh_reg, [72]: adds_sh_reg_32 ### SUB (shifted register). Subtract [73]: sub_sh_reg Specification: sub_sh_reg, [74]: sub_sh_reg_32 ### SUBS (shifted register). Subtract and set flags [75]: subs_sh_reg Specification: subs_sh_reg, [76]: subs_sh_reg_32 ### CMN (shifted register). Compare negative [77]: cmn_sh_reg Specification: cmn_sh_reg, [78]: cmn_sh_reg_32 ### CMP (shifted register). Compare [79]: cmp_sh_reg Specification: cmp_sh_reg, [80]: cmp_sh_reg_32 h3. Arithmetic (extending register) ### ADD (extended register). Add Specification: add_ex_reg, [81]: add_ex_reg [82]: add_ex_reg_32 ### ADDS (extended register). Add and set flags [83]: adds_ex_reg Specification: adds_ex_reg, [84]: adds_ex_reg_32 ### SUB (extended register). Subtract [85]: sub_ex_reg Specification: sub_ex_reg, [86]: sub_ex_reg_32 ### SUBS (extended register). Subtract and set flags [87]: subs_ex_reg Specification: subs_ex_reg, [88]: subs_ex_reg_32 ### CMN (extended register). Compare negative [89]: cmn_ex_reg Specification: cmn_ex_reg, [90]: cmn_ex_reg_32 ### CMP (extended register). Compare [91]: cmp_ex_reg Specification: cmp_ex_reg, [92]: cmp_ex_reg_32 h3. Logical (shifted register) [93]: and_bitwise [94]: and_bitwise_32 [95]: ands_bitwise [96]: ands_bitwise_32 [97]: bic_bitwise [98]: bic_bitwise_32 [99]: bics_bitwise [100]: bics_bitwise_32 [101]: eon_bitwise [102]: eon_bitwise_32 [103]: eor_bitwise [104]: eor_bitwise_32 [105]: orr_bitwise [106]: orr_bitwise_32 [107]: orn_bitwise [108]: orn_bitwise_32 [109]: mvn_bitwise [110]: mvn_bitwise_32 [111]: mov_reg [112]: mov_reg_32 [113]: tst_bitwise [114]: tst_bitwise_32 [47]: madd [48]: madd_32 [49]: msub [50]: msub_32 [51]: mneg [52]: mneg_32 [53]: mul [54]: mul_32 [55]: smaddl [56]: smsubl [57]: smnegl [58]: smull [59]: smulh [60]: umaddl [61]: umsubl [62]: umnegl [63]: umull [64]: umulh [65]: sdiv [66]: sdiv_32 [67]: udiv [68]: udiv_32 [115]: b [116]: cbnz [117]: cbnz_32 [118]: cbz [119]: cbz_32 [120]: tbnz [121]: tbz [122]: b_imm [123]: bl [124]: blr [125]: br [126]: ret [127]: ldr_postindex [128]: str_postindex [129]: ldxr [130]: ldxr_32 [131]: ldxrb_32 [132]: ldxrh_32 [133]: ldxp [134]: ldxp_32 [135]: stxr [136]: stxr_32 [137]: stxrb_32 [138]: stxrh_32 [139]: stxp [140]: stxp_32 [141]: ldar [142]: ldar_32 [143]: ldarb [144]: ldarh [145]: stlr [146]: stlr_32 [147]: stlrb [148]: stlrh [149]: ldaxr [150]: ldaxr_32 [151]: ldaxrb_32 [152]: ldaxrh_32 [153]: ldaxp [154]: ldaxp_32 [155]: stlxr [156]: stlxr_32 [157]: stlxrb_32 [158]: stlxrh_32 [159]: stlxp [160]: stlxp_32 [161]: svc [162]: hvc [163]: smc [164]: eret [165]: brk [166]: hlt [167]: dcps1 [168]: dcps2 [169]: dcps3 [170]: drps [171]: mrs [172]: msr [173]: msr_dc [174]: msr_ds [175]: msr_ss [176]: msr_uao [177]: sys [178]: sysl [179]: ic [180]: ic_reg [181]: dc [182]: at [183]: tlbi [184]: tlbi_reg [185]: hint [186]: nop [187]: yield_op [188]: wfe [189]: wfi [190]: sev [191]: sevl [192]: clrex [193]: dsb [194]: dmb [195]: isb [200]: psldr [201]: psldr32