.{ // C6.2.1 ADC .{ .pattern = "ADC , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .adc, .Wd, .Wn, .Wm }, }, .{ .pattern = "ADC , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .adc, .Xd, .Xn, .Xm }, }, // C6.2.2 ADCS .{ .pattern = "ADCS , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .adcs, .Wd, .Wn, .Wm }, }, .{ .pattern = "ADCS , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .adcs, .Xd, .Xn, .Xm }, }, // C6.2.3 ADD (extended register) .{ .pattern = "ADD , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .add, .Wd, .Wn, .{ .register = .Wm } }, }, .{ .pattern = "ADD , , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{} }, }, .encode = .{ .add, .Wd, .Wn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = 0, } } }, }, .{ .pattern = "ADD , , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{} }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 3 }, .max_valid = 4 } }, }, .encode = .{ .add, .Wd, .Wn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = .amount, } } }, }, .{ .pattern = "ADD , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .add, .Xd, .Xn, .{ .register = .Xm } }, }, .{ .pattern = "ADD , , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{ .size = .word } }, }, .encode = .{ .add, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = 0, } } }, }, .{ .pattern = "ADD , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{ .size = .word } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 3 }, .max_valid = 4 } }, }, .encode = .{ .add, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = .amount, } } }, }, .{ .pattern = "ADD , , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .extend = .{ .extend = .{ .size = .doubleword } }, }, .encode = .{ .add, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Xm, .option = .extend, .amount = 0, } } }, }, .{ .pattern = "ADD , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .extend = .{ .extend = .{ .size = .doubleword } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 3 }, .max_valid = 4 } }, }, .encode = .{ .add, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Xm, .option = .extend, .amount = .amount, } } }, }, // C6.2.4 ADD (immediate) .{ .pattern = "ADD , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, }, .encode = .{ .add, .Wd, .Wn, .{ .immediate = .imm } }, }, .{ .pattern = "ADD , , #, LSL #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, .shift = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 4 }, .multiple_of = 12 } }, }, .encode = .{ .add, .Wd, .Wn, .{ .shifted_immediate = .{ .immediate = .imm, .lsl = .shift } } }, }, .{ .pattern = "ADD , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, }, .encode = .{ .add, .Xd, .Xn, .{ .immediate = .imm } }, }, .{ .pattern = "ADD , , #, LSL #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, .shift = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 4 }, .multiple_of = 12 } }, }, .encode = .{ .add, .Xd, .Xn, .{ .shifted_immediate = .{ .immediate = .imm, .lsl = .shift } } }, }, // C6.2.5 ADD (shifted register) .{ .pattern = "ADD , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .add, .Wd, .Wn, .{ .register = .Wm } }, }, .{ .pattern = "ADD , , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .shift = .{ .shift = .{ .allow_ror = false } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 } } }, }, .encode = .{ .add, .Wd, .Wn, .{ .shifted_register_explicit = .{ .register = .Wm, .shift = .shift, .amount = .amount, } } }, }, .{ .pattern = "ADD , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .add, .Xd, .Xn, .{ .register = .Xm } }, }, .{ .pattern = "ADD , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .shift = .{ .shift = .{ .allow_ror = false } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 } } }, }, .encode = .{ .add, .Xd, .Xn, .{ .shifted_register_explicit = .{ .register = .Xm, .shift = .shift, .amount = .amount, } } }, }, // C6.2.6 ADDG .{ .requires = .{.mte}, .pattern = "ADDG , , #, #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .uimm6 = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 10 }, .multiple_of = 16 } }, .uimm4 = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 4 } } }, }, .encode = .{ .addg, .Xd, .Xn, .uimm6, .uimm4 }, }, // C6.2.7 ADDS (extended register) .{ .pattern = "ADDS , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .adds, .Wd, .Wn, .{ .register = .Wm } }, }, .{ .pattern = "ADDS , , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{} }, }, .encode = .{ .adds, .Wd, .Wn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = 0, } } }, }, .{ .pattern = "ADDS , , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{} }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 3 }, .max_valid = 4 } }, }, .encode = .{ .adds, .Wd, .Wn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = .amount, } } }, }, .{ .pattern = "ADDS , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .register = .Xm } }, }, .{ .pattern = "ADDS , , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{ .size = .word } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = 0, } } }, }, .{ .pattern = "ADDS , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .extend = .{ .extend = .{ .size = .word } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 3 }, .max_valid = 4 } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Wm, .option = .extend, .amount = .amount, } } }, }, .{ .pattern = "ADDS , , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .extend = .{ .extend = .{ .size = .doubleword } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Xm, .option = .extend, .amount = 0, } } }, }, .{ .pattern = "ADDS , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .extend = .{ .extend = .{ .size = .doubleword } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 3 }, .max_valid = 4 } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .extended_register_explicit = .{ .register = .Xm, .option = .extend, .amount = .amount, } } }, }, // C6.2.8 ADDS (immediate) .{ .pattern = "ADDS , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, }, .encode = .{ .adds, .Wd, .Wn, .{ .immediate = .imm } }, }, .{ .pattern = "ADDS , , #, LSL #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, .shift = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 4 }, .multiple_of = 12 } }, }, .encode = .{ .adds, .Wd, .Wn, .{ .shifted_immediate = .{ .immediate = .imm, .lsl = .shift } } }, }, .{ .pattern = "ADDS , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .immediate = .imm } }, }, .{ .pattern = "ADDS , , #, LSL #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword }, .allow_sp = true } }, .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 12 } } }, .shift = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 4 }, .multiple_of = 12 } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .shifted_immediate = .{ .immediate = .imm, .lsl = .shift } } }, }, // C6.2.9 ADDS (shifted register) .{ .pattern = "ADDS , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .adds, .Wd, .Wn, .{ .register = .Wm } }, }, .{ .pattern = "ADDS , , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .shift = .{ .shift = .{ .allow_ror = false } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 } } }, }, .encode = .{ .adds, .Wd, .Wn, .{ .shifted_register_explicit = .{ .register = .Wm, .shift = .shift, .amount = .amount, } } }, }, .{ .pattern = "ADDS , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .register = .Xm } }, }, .{ .pattern = "ADDS , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .shift = .{ .shift = .{ .allow_ror = false } }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 } } }, }, .encode = .{ .adds, .Xd, .Xn, .{ .shifted_register_explicit = .{ .register = .Xm, .shift = .shift, .amount = .amount, } } }, }, // C6.2.13 AND (shifted register) .{ .pattern = "AND , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .@"and", .Wd, .Wn, .{ .register = .Wm } }, }, .{ .pattern = "AND , , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .shift = .{ .shift = .{} }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 } } }, }, .encode = .{ .@"and", .Wd, .Wn, .{ .shifted_register_explicit = .{ .register = .Wm, .shift = .shift, .amount = .amount, } } }, }, .{ .pattern = "AND , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .@"and", .Xd, .Xn, .{ .register = .Xm } }, }, .{ .pattern = "AND , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .shift = .{ .shift = .{} }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 } } }, }, .encode = .{ .@"and", .Xd, .Xn, .{ .shifted_register_explicit = .{ .register = .Xm, .shift = .shift, .amount = .amount, } } }, }, // C6.2.15 ANDS (shifted register) .{ .pattern = "ANDS , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .ands, .Wd, .Wn, .{ .register = .Wm } }, }, .{ .pattern = "ANDS , , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, .shift = .{ .shift = .{} }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 } } }, }, .encode = .{ .ands, .Wd, .Wn, .{ .shifted_register_explicit = .{ .register = .Wm, .shift = .shift, .amount = .amount, } } }, }, .{ .pattern = "ANDS , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .ands, .Xd, .Xn, .{ .register = .Xm } }, }, .{ .pattern = "ANDS , , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .shift = .{ .shift = .{} }, .amount = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 } } }, }, .encode = .{ .ands, .Xd, .Xn, .{ .shifted_register_explicit = .{ .register = .Xm, .shift = .shift, .amount = .amount, } } }, }, // C6.2.16 ASR (register) .{ .pattern = "ASR , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .asrv, .Wd, .Wn, .Wm }, }, .{ .pattern = "ASR , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .asrv, .Xd, .Xn, .Xm }, }, // C6.2.17 ASR (immediate) .{ .pattern = "ASR , , #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .shift = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 } } }, }, .encode = .{ .sbfm, .Wd, .Wn, .{ .N = .word, .immr = .shift, .imms = 31 } }, }, .{ .pattern = "ASR , , #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .shift = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 } } }, }, .encode = .{ .sbfm, .Xd, .Xn, .{ .N = .doubleword, .immr = .shift, .imms = 63 } }, }, // C6.2.18 ASRV .{ .pattern = "ASRV , , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .Wm = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .asrv, .Wd, .Wn, .Wm }, }, .{ .pattern = "ASRV , , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xm = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .asrv, .Xd, .Xn, .Xm }, }, // C6.2.24 AXFLAG .{ .requires = .{.altnzcv}, .pattern = "AXFLAG", .symbols = .{}, .encode = .{.axflag}, }, // C6.2.28 BFC .{ .pattern = "BFC , #, #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .lsb = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 }, .adjust = .neg_wrap } }, .width = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 }, .adjust = .dec } }, }, .encode = .{ .bfm, .Wd, .wzr, .{ .N = .word, .immr = .lsb, .imms = .width } }, }, .{ .pattern = "BFC , #, #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .lsb = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 }, .adjust = .neg_wrap } }, .width = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 }, .adjust = .dec } }, }, .encode = .{ .bfm, .Xd, .xzr, .{ .N = .doubleword, .immr = .lsb, .imms = .width } }, }, // C6.2.29 BFI .{ .pattern = "BFI , , #, #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .lsb = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 }, .adjust = .neg_wrap } }, .width = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 }, .adjust = .dec } }, }, .encode = .{ .bfm, .Wd, .Wn, .{ .N = .word, .immr = .lsb, .imms = .width } }, }, .{ .pattern = "BFI , , #, #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .lsb = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 }, .adjust = .neg_wrap } }, .width = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 }, .adjust = .dec } }, }, .encode = .{ .bfm, .Xd, .Xn, .{ .N = .doubleword, .immr = .lsb, .imms = .width } }, }, // C6.2.30 BFM .{ .pattern = "BFM , , #, #", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, .immr = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 } } }, .imms = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 5 } } }, }, .encode = .{ .bfm, .Wd, .Wn, .{ .N = .word, .immr = .immr, .imms = .imms } }, }, .{ .pattern = "BFM , , #, #", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .immr = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 } } }, .imms = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 6 } } }, }, .encode = .{ .bfm, .Xd, .Xn, .{ .N = .doubleword, .immr = .immr, .imms = .imms } }, }, // C6.2.35 BLR .{ .pattern = "BLR ", .symbols = .{ .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .blr, .Xn }, }, // C6.2.37 BR .{ .pattern = "BR ", .symbols = .{ .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .br, .Xn }, }, // C6.2.40 BRK .{ .pattern = "BRK #", .symbols = .{ .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 16 } } }, }, .encode = .{ .brk, .imm }, }, // C6.2.52 CFINV .{ .requires = .{.flagm}, .pattern = "CFINV", .symbols = .{}, .encode = .{.cfinv}, }, // C6.2.56 CLREX .{ .pattern = "CLREX", .symbols = .{}, .encode = .{ .clrex, 0b1111 }, }, .{ .pattern = "CLREX #", .symbols = .{ .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 4 } } }, }, .encode = .{ .clrex, .imm }, }, // C6.2.57 CLS .{ .pattern = "CLS , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .cls, .Wd, .Wn }, }, .{ .pattern = "CLS , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .cls, .Xd, .Xn }, }, // C6.2.58 CLZ .{ .pattern = "CLZ , ", .symbols = .{ .Wd = .{ .reg = .{ .format = .{ .general = .word } } }, .Wn = .{ .reg = .{ .format = .{ .general = .word } } }, }, .encode = .{ .clz, .Wd, .Wn }, }, .{ .pattern = "CLZ , ", .symbols = .{ .Xd = .{ .reg = .{ .format = .{ .general = .doubleword } } }, .Xn = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .clz, .Xd, .Xn }, }, // C6.2.109 DC .{ .pattern = "DC IVAC, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b000, 0b0111, 0b0110, 0b001, .Xt }, }, .{ .pattern = "DC ISW, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b000, 0b0111, 0b0110, 0b010, .Xt }, }, .{ .pattern = "DC CSW, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b000, 0b0111, 0b1010, 0b010, .Xt }, }, .{ .pattern = "DC CISW, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b000, 0b0111, 0b1110, 0b010, .Xt }, }, .{ .pattern = "DC ZVA, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b011, 0b0111, 0b0100, 0b001, .Xt }, }, .{ .pattern = "DC CVAC, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b011, 0b0111, 0b1010, 0b001, .Xt }, }, .{ .pattern = "DC CVAU, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b011, 0b0111, 0b1011, 0b001, .Xt }, }, .{ .pattern = "DC CIVAC, ", .symbols = .{ .Xt = .{ .reg = .{ .format = .{ .general = .doubleword } } }, }, .encode = .{ .sys, 0b011, 0b0111, 0b1110, 0b001, .Xt }, }, // C6.2.110 DCPS1 .{ .pattern = "DCPS1", .symbols = .{}, .encode = .{ .dcps1, 0 }, }, .{ .pattern = "DCPS1 #", .symbols = .{ .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 16 } } }, }, .encode = .{ .dcps1, .imm }, }, // C6.2.111 DCPS2 .{ .pattern = "DCPS2", .symbols = .{}, .encode = .{ .dcps2, 0 }, }, .{ .pattern = "DCPS2 #", .symbols = .{ .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 16 } } }, }, .encode = .{ .dcps2, .imm }, }, // C6.2.112 DCPS3 .{ .pattern = "DCPS3", .symbols = .{}, .encode = .{ .dcps3, 0 }, }, .{ .pattern = "DCPS3 #", .symbols = .{ .imm = .{ .imm = .{ .type = .{ .signedness = .unsigned, .bits = 16 } } }, }, .encode = .{ .dcps3, .imm }, }, // C6.2.116 DSB .{ .pattern = "DSB