diff --git a/compiler/src/dmd/backend/arm/cod3.d b/compiler/src/dmd/backend/arm/cod3.d index f855111b0a..fde9bb6843 100644 --- a/compiler/src/dmd/backend/arm/cod3.d +++ b/compiler/src/dmd/backend/arm/cod3.d @@ -343,7 +343,7 @@ void prolog_saveregs(ref CGstate cg, ref CodeBuilder cdb, regm_t topush, int cfa { printf("prolog_saveregs() topush: %s pushoffuse: %d\n", regm_str(topush), cg.pushoffuse); assert(!(topush & ~fregsaved)); - assert(cg.pushoffuse); + assert(cg.pushoffuse || !topush); // Save to preallocated section in the stack frame int xmmtopush = 0; @@ -393,7 +393,7 @@ private void epilog_restoreregs(ref CGstate cg, ref CodeBuilder cdb, regm_t topo { assert(cg.AArch64); - assert(cg.pushoffuse); + assert(cg.pushoffuse || !topop); // Save to preallocated section in the stack frame int xmmtopop = popcnt(topop & XMMREGS); // XMM regs take 16 bytes diff --git a/compiler/src/dmd/backend/arm/cod4.d b/compiler/src/dmd/backend/arm/cod4.d index e8996f996d..6c21c3315f 100644 --- a/compiler/src/dmd/backend/arm/cod4.d +++ b/compiler/src/dmd/backend/arm/cod4.d @@ -1511,7 +1511,7 @@ void cdshtlng(ref CGstate cg, ref CodeBuilder cdb,elem* e,ref regm_t pretregs) // EA: LDR w0,[sp,#8] // reg: MOV w0,w1 code cs; - getlvalue(cdb,cs,e,0,RM.load); + getlvalue(cdb,cs,e1,0,RM.load); cs.Sextend = (cs.Sextend & 0x100) | Extend.LSL; reg = allocreg(cdb,retregs,TYint); loadFromEA(cs,reg,4,4);