Skip to content

Commit 205adae

Browse files
authored
Fix STLUR for 0 imm (#106760)
1 parent 8fd46b2 commit 205adae

File tree

2 files changed

+19
-34
lines changed

2 files changed

+19
-34
lines changed

src/coreclr/jit/codegenarm64test.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1900,6 +1900,16 @@ void CodeGen::genArm64EmitterUnitTestsAdvSimd()
19001900
theEmitter->emitIns_R_R_I(INS_stur, EA_8BYTE, REG_V7, REG_R10, 9);
19011901
theEmitter->emitIns_R_R_I(INS_stur, EA_16BYTE, REG_V7, REG_R10, 17);
19021902

1903+
theEmitter->emitIns_R_R_I(INS_stlurb, EA_1BYTE, REG_V7, REG_R10, 0);
1904+
theEmitter->emitIns_R_R_I(INS_stlurh, EA_2BYTE, REG_V7, REG_R10, 0);
1905+
theEmitter->emitIns_R_R_I(INS_stlur, EA_4BYTE, REG_V7, REG_R10, 0);
1906+
theEmitter->emitIns_R_R_I(INS_stlur, EA_8BYTE, REG_V7, REG_R10, 0);
1907+
1908+
theEmitter->emitIns_R_R_I(INS_ldapurb, EA_1BYTE, REG_V8, REG_R9, 0);
1909+
theEmitter->emitIns_R_R_I(INS_ldapurh, EA_2BYTE, REG_V8, REG_R9, 0);
1910+
theEmitter->emitIns_R_R_I(INS_ldapur, EA_4BYTE, REG_V8, REG_R9, 0);
1911+
theEmitter->emitIns_R_R_I(INS_ldapur, EA_8BYTE, REG_V8, REG_R9, 0);
1912+
19031913
// load/store pair
19041914
theEmitter->emitIns_R_R_R(INS_ldnp, EA_8BYTE, REG_V0, REG_V1, REG_R10);
19051915
theEmitter->emitIns_R_R_R_I(INS_stnp, EA_8BYTE, REG_V1, REG_V2, REG_R10, 0);

src/coreclr/jit/emitarm64.cpp

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5614,16 +5614,6 @@ void emitter::emitIns_R_R_I(instruction ins,
56145614
isLdSt = true;
56155615
break;
56165616

5617-
case INS_ldapurb:
5618-
case INS_stlurb:
5619-
case INS_ldurb:
5620-
case INS_sturb:
5621-
// size is ignored
5622-
unscaledOp = true;
5623-
scale = 0;
5624-
isLdSt = true;
5625-
break;
5626-
56275617
case INS_ldrh:
56285618
case INS_strh:
56295619
// size is ignored
@@ -5632,16 +5622,6 @@ void emitter::emitIns_R_R_I(instruction ins,
56325622
isLdSt = true;
56335623
break;
56345624

5635-
case INS_ldurh:
5636-
case INS_ldapurh:
5637-
case INS_sturh:
5638-
case INS_stlurh:
5639-
// size is ignored
5640-
unscaledOp = true;
5641-
scale = 0;
5642-
isLdSt = true;
5643-
break;
5644-
56455625
case INS_ldr:
56465626
case INS_str:
56475627
// Is the target a vector register?
@@ -5661,24 +5641,19 @@ void emitter::emitIns_R_R_I(instruction ins,
56615641
isLdrStr = true;
56625642
break;
56635643

5644+
case INS_ldurb:
5645+
case INS_ldurh:
56645646
case INS_ldur:
5647+
case INS_sturb:
5648+
case INS_sturh:
56655649
case INS_stur:
5650+
case INS_ldapurb:
5651+
case INS_ldapurh:
56665652
case INS_ldapur:
5653+
case INS_stlurb:
5654+
case INS_stlurh:
56675655
case INS_stlur:
5668-
// Is the target a vector register?
5669-
if (isVectorRegister(reg1))
5670-
{
5671-
assert(isValidVectorLSDatasize(size));
5672-
assert(isGeneralRegisterOrSP(reg2));
5673-
isSIMD = true;
5674-
}
5675-
else
5676-
{
5677-
assert(isValidGeneralDatasize(size));
5678-
}
5679-
unscaledOp = true;
5680-
scale = 0;
5681-
isLdSt = true;
5656+
fmt = IF_LS_2C;
56825657
break;
56835658

56845659
case INS_ld2:

0 commit comments

Comments
 (0)