diff --git a/lib/arm-mes/arm.M1 b/lib/arm-mes/arm.M1 index c0c2b010..d491f232 100644 --- a/lib/arm-mes/arm.M1 +++ b/lib/arm-mes/arm.M1 @@ -264,7 +264,10 @@ DEFINE lsl____%r1,%r1,$i8 90a0e31119a0e1 # mov r9, #xx; lsl %r1, %r1, %r9 DEFINE lsr____%r0,%r0,%r1 3001a0e1 # lsr %r0, %r0, %r1 DEFINE ldr____%r0,(%sp,#$i8) 009de5 # ldr r0, [r13+xx] DEFINE ldr____%r1,(%sp,#$i8) 109de5 # ldr r1, [r13+xx] -DEFINE add____%r2,%r0,%r1,lsl#4 012280e0 +#DEFINE add____%r2,%r0,%r1,lsl#4 012280e0 +# Without carry +DEFINE add____%r2,%r0,%r1,lsl#2 012180e0 +DEFINE add____%r2,%r1,%r0,lsl#2 002181e0 DEFINE add____%r2,$i8 2082e2 DEFINE bl eb DEFINE b ea diff --git a/lib/linux/arm-mes-mescc/crt1.c b/lib/linux/arm-mes-mescc/crt1.c index 0601a415..08eb0346 100644 --- a/lib/linux/arm-mes-mescc/crt1.c +++ b/lib/linux/arm-mes-mescc/crt1.c @@ -32,7 +32,7 @@ sp -> argc environ = &argv[argc + 1] -HOWEVER, the function entry already allocated space for locals on the stack (after saving fp, which moved sp again). Hence, use fp instead of sp. +HOWEVER, the function entry already allocated space for locals on the stack (after saving lr and fp, which moved sp again). Hence, use fp instead of sp. */ /* stdin = 0 */ @@ -52,9 +52,9 @@ HOWEVER, the function entry already allocated space for locals on the stack (aft /* Add "environ" to main's arguments */ - asm ("!4 ldr____%r0,(%fp,+#$i8)"); /* "argc" */ - asm ("!8 ldr____%r1,(%fp,+#$i8)"); /* "argv" */ - asm ("add____%r2,%r0,%r1,lsl#4"); /* "environ": argv + argc */ + asm ("!8 ldr____%r0,(%fp,+#$i8)"); /* "argc" */ + asm ("!12 ldr____%r1,(%fp,+#$i8)"); /* "argv" */ + asm ("add____%r2,%r1,%r0,lsl#2"); /* "environ": argv + argc */ asm ("!4 add____%r2,$i8"); /* "environ": argv + argc + 1 */ asm ("push___%r2");