Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 56cca16

Browse files
committed
[Arm64] Add emitter support for ldar/stlr
1 parent 27f4b80 commit 56cca16

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

src/jit/codegenarm64.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4239,6 +4239,17 @@ void CodeGen::genArm64EmitterUnitTests()
42394239
theEmitter->emitIns_R_R_I(INS_ldr, EA_8BYTE, REG_R8, REG_R9, 1, INS_OPTS_POST_INDEX);
42404240
theEmitter->emitIns_R_R_I(INS_ldr, EA_8BYTE, REG_R8, REG_R9, 1, INS_OPTS_PRE_INDEX);
42414241

4242+
// ldar/stlr Rt, [reg]
4243+
theEmitter->emitIns_R_R(INS_ldar, EA_8BYTE, REG_R9, REG_R8);
4244+
theEmitter->emitIns_R_R(INS_ldar, EA_4BYTE, REG_R7, REG_R10);
4245+
theEmitter->emitIns_R_R(INS_ldarb, EA_4BYTE, REG_R5, REG_R11);
4246+
theEmitter->emitIns_R_R(INS_ldarh, EA_4BYTE, REG_R5, REG_R12);
4247+
4248+
theEmitter->emitIns_R_R(INS_stlr, EA_8BYTE, REG_R9, REG_R8);
4249+
theEmitter->emitIns_R_R(INS_stlr, EA_4BYTE, REG_R7, REG_R13);
4250+
theEmitter->emitIns_R_R(INS_stlrb, EA_4BYTE, REG_R5, REG_R14);
4251+
theEmitter->emitIns_R_R(INS_stlrh, EA_4BYTE, REG_R3, REG_R15);
4252+
42424253
#endif // ALL_ARM64_EMITTER_UNIT_TESTS
42434254

42444255
#ifdef ALL_ARM64_EMITTER_UNIT_TESTS

src/jit/emitarm64.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3878,6 +3878,26 @@ void emitter::emitIns_R_R(
38783878
fmt = IF_DV_2M;
38793879
break;
38803880

3881+
case INS_ldar:
3882+
case INS_stlr:
3883+
assert(isValidGeneralDatasize(size));
3884+
3885+
__fallthrough;
3886+
3887+
case INS_ldarb:
3888+
case INS_ldarh:
3889+
case INS_stlrb:
3890+
case INS_stlrh:
3891+
assert(isValidGeneralLSDatasize(size));
3892+
assert(isGeneralRegisterOrZR(reg1));
3893+
assert(isGeneralRegisterOrSP(reg2));
3894+
assert(insOptsNone(opt));
3895+
3896+
reg2 = encodingSPtoZR(reg2);
3897+
3898+
fmt = IF_LS_2A;
3899+
break;
3900+
38813901
case INS_ldr:
38823902
case INS_ldrb:
38833903
case INS_ldrh:

src/jit/instrsarm64.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,15 @@ INST2(sli, "sli", 0, 0, IF_EN2N, 0x7F005400, 0x2F005400)
555555
// sli Vd,Vn,imm DV_2N 011111110iiiiiii 010101nnnnnddddd 7F00 5400 Vd Vn imm (shift - scalar)
556556
// sli Vd,Vn,imm DV_2O 0Q1011110iiiiiii 010101nnnnnddddd 2F00 5400 Vd,Vn imm (shift - vector)
557557

558+
INST1(ldar, "ldar", 0,LD, IF_LS_2A, 0x88DFFC00)
559+
// ldar Rt,[Xn] LS_2A 1X00100011011111 111111nnnnnttttt 88DF FC00
560+
561+
INST1(ldarb, "ldarb", 0,LD, IF_LS_2A, 0x08DFFC00)
562+
// ldarb Rt,[Xn] LS_2A 0000100011011111 111111nnnnnttttt 08DF FC00
563+
564+
INST1(ldarh, "ldarh", 0,LD, IF_LS_2A, 0x48DFFC00)
565+
// ldarh Rt,[Xn] LS_2A 0100100011011111 111111nnnnnttttt 48DF FC00
566+
558567
INST1(ldur, "ldur", 0,LD, IF_LS_2C, 0xB8400000)
559568
// ldur Rt,[Xn+simm9] LS_2C 1X111000010iiiii iiii00nnnnnttttt B840 0000 [Xn imm(-256..+255)]
560569

@@ -573,6 +582,15 @@ INST1(ldursh, "ldursh", 0,LD, IF_LS_2C, 0x78800000)
573582
INST1(ldursw, "ldursw", 0,LD, IF_LS_2C, 0xB8800000)
574583
// ldursw Rt,[Xn+simm9] LS_2C 10111000100iiiii iiii00nnnnnttttt B880 0000 [Xn imm(-256..+255)]
575584

585+
INST1(stlr, "stlr", 0,LD, IF_LS_2A, 0x889FFC00)
586+
// stlr Rt,[Xn] LS_2A 1X00100010011111 111111nnnnnttttt 889F FC00
587+
588+
INST1(stlrb, "stlrb", 0,LD, IF_LS_2A, 0x089FFC00)
589+
// stlrb Rt,[Xn] LS_2A 0000100010011111 111111nnnnnttttt 089F FC00
590+
591+
INST1(stlrh, "stlrh", 0,LD, IF_LS_2A, 0x489FFC00)
592+
// stlrh Rt,[Xn] LS_2A 0100100010011111 111111nnnnnttttt 489F FC00
593+
576594
INST1(stur, "stur", 0,ST, IF_LS_2C, 0xB8000000)
577595
// stur Rt,[Xn+simm9] LS_2C 1X111000000iiiii iiii00nnnnnttttt B800 0000 [Xn imm(-256..+255)]
578596

0 commit comments

Comments
 (0)