redundate add of Voffset, disassembler correction (#21128)

This commit is contained in:
Walter Bright 2025-03-31 15:57:54 -07:00 committed by GitHub
parent 4d0934d37f
commit bd670444c7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 5 deletions

View file

@ -108,7 +108,7 @@ void loadFromEA(ref code cs, reg_t reg, uint szw, uint szr)
else if (cs.base != NOREG)
{
// LDRB/LDRH/LDR reg,[cs.base, #offset]
uint offset = cast(uint)cs.IEV1.Voffset;
uint offset = 0; //cast(uint)cs.IEV1.Voffset; Voffset is added in by assignaddrc()
if (szr == 1)
cs.Iop = signExtend ? INSTR.ldrsb_imm(szw == 8, reg, cs.base, offset)
: INSTR.ldrb_imm (szw == 8, reg, cs.base, offset);
@ -180,7 +180,7 @@ void storeToEA(ref code cs, reg_t reg, uint sz)
else if (cs.base != NOREG)
{
// STRB/STRH/STR reg,[cs.base, #0]
uint offset = cast(uint)cs.IEV1.Voffset;
uint offset = 0; //cast(uint)cs.IEV1.Voffset; Voffset added in by assignaddr()
if (sz == 1)
cs.Iop = INSTR.strb_imm(reg, cs.base, offset);
else if (sz == 2)

View file

@ -1011,7 +1011,7 @@ void cdshift(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs)
uint opcode;
switch (e.Eoper)
{
case OPshl: opcode = 0x8; break;
case OPshl: opcode = 0x8; break; // LSL Rd,Rn,Rm https://www.scs.stanford.edu/~zyedidia/arm64/lsl_lslv.html
case OPshr: opcode = 0x9; break;
case OPashr: opcode = 0xA; break;
case OPror: opcode = 0xB; break;

View file

@ -2237,8 +2237,13 @@ void disassemble(uint c) @trusted
bool is64 = false;
switch (ldr(size, VR, opc))
{
case ldr(0,0,0): p1 = "strb"; goto Lldr;
case ldr(0,0,1): p1 = "ldrb"; goto Lldr;
case ldr(0,0,0): p1 = "strb"; goto Lldr8; // https://www.scs.stanford.edu/~zyedidia/arm64/strb_imm.html
case ldr(0,0,1): p1 = "ldrb"; goto Lldr8;
Lldr8:
p2 = regString(is64, Rt);
p3 = eaString(0, cast(ubyte)Rn, imm12);
break;
case ldr(0,0,2): p1 = "ldrsb"; goto Lldr64;
case ldr(0,0,3): p1 = "ldrsb"; goto Lldr;
case ldr(1,0,0): p1 = "strh"; goto Lldr;