Commit Graph

51 Commits

Author SHA1 Message Date
Danny Milosavljevic b956dc152c
ARM: Fix argc, argv and envp handling.
* lib/linux/arm-mes-mescc/crt1.c (_start): Fix argc, argv and envp handling.
* lib/arm-mes/arm.M1 (add____%r2,%r0,%r1,lsl#2): Add macro.
(add____%r2,%r0,%r1,lsl#4): Delete macro.
(add____%r2,%r1,%r0,lsl#2): Add macro.
2019-09-09 18:34:07 +02:00
Danny Milosavljevic 233bcf75ea
ARM: Add macro "ldrh___%r0,(%r1)".
* lib/arm-mes/arm.M1 (ldrh___%r0,(%r1)): Add macro.
2019-09-09 18:34:07 +02:00
Danny Milosavljevic 499da86c70
ARM: Add macro "strh___%r0,(%fp,-#$i8)".
* lib/arm-mes/arm.M1 (strh___%r0,(%fp,-#$i8)): Add macro.
2019-09-09 18:34:07 +02:00
Danny Milosavljevic ea99d36af5
ARM: Fix encoding of "mov____0x32(%ebp),%r1", "mov____0x32(%ebp),%r0", "xchg___%r0,(%esp)" pseudo-instructions.
* lib/arm-mes/arm.M1 (mov____0x32(%ebp),%r1): Modify.
(mov____0x32(%ebp),%r0): Modify.
(xchg___%r0,(%esp)): Modify.
2019-09-09 18:34:07 +02:00
Danny Milosavljevic f9a6e1aed0
ARM: Add macro "strh___%r0,(%fp,+#$i8)".
* lib/arm-mes/arm.M1 (strh___%r0,(%fp,+#$i8)): New macro.
2019-09-09 18:34:07 +02:00
Danny Milosavljevic 0e2d6b4b84
ARM: Add macro "sxth__%r1,%r1".
* lib/arm-mes/arm.M1 (sxth__%r1,%r1): New macro.
2019-09-09 18:34:06 +02:00
Danny Milosavljevic 0d60769ea4
ARM: Add "strh___%r0,(%r1)" macro.
* lib/arm-mes/arm.M1 (strh___%r0,(%r1)): New macro.
2019-09-09 18:34:06 +02:00
Danny Milosavljevic 371e11fd9e
ARM: Fix add____$i32,(%r0).
* lib/arm-mes/arm.M1 (add____$i32,(%r0)): Fix it.
2019-09-09 18:34:06 +02:00
Danny Milosavljevic d0e05a4a80
ARM: If "ADD"'s immediate is less than 0, subtract.
* lib/arm-mes/arm.M1 (sub____$i8,%r0): New macro.
(sub____$i8,%r1): New macro.
* module/mescc/armv4/as.scm (armv4:call-label): Add comment.
(armv4:r-byte-mem-add): Subtract if value is negative.
(armv4:r-word-mem-add): Subtract if value is negative.
(armv4:local-ptr->r): Subtract if value is negative.
(armv4:r+value): Subtract if value is negative.
(armv4:r0+value): Subtract if value is negative.
2019-09-09 18:34:06 +02:00
Danny Milosavljevic 6fbead7479
ARM: Clean up comments.
* lib/arm-mes/arm.M1: Clean up comments.
2019-09-09 18:34:05 +02:00
Danny Milosavljevic b9b744001a
ARM: Fix storing bytes in the stack frame.
* lib/arm-mes/arm.M1 (strb___%r0,0x8(%ebp)): Rename to...
(strb___%r0,(%fp,+#$i8)): ... this.
(strb___%r0,(%fp,-#$i8)): New macro.
* module/mescc/armv4/as.scm (armv4:byte-r->local+n): Use them.
2019-09-09 18:34:05 +02:00
Danny Milosavljevic cf0c7db11f
ARM: Fix handling of negative offsets in load/store instructions.
* lib/arm-mes/arm.M1 (ldr____%r0,(%fp,+#$i8)): New macro.
(ldr____%r1,(%fp,+#$i8)): New macro.
(ldr____%r2,(%fp,+#$i8)): New macro.
(ldr____%r3,(%fp,+#$i8)): New macro.
(ldr____%r4,(%fp,+#$i8)): New macro.
(ldr____%r5,(%fp,+#$i8)): New macro.
(ldr____%r7,(%fp,+#$i8)): New macro.
(ldr____%fp,(%fp,+#$i8)): New macro.
(ldr____%sp,(%fp,+#$i8)): New macro.
(ldr____%r0,(%fp,-#$i8)): New macro.
(ldr____%r1,(%fp,-#$i8)): New macro.
(ldr____%r2,(%fp,-#$i8)): New macro.
(ldr____%r3,(%fp,-#$i8)): New macro.
(ldr____%r4,(%fp,-#$i8)): New macro.
(ldr____%r5,(%fp,-#$i8)): New macro.
(ldr____%r7,(%fp,-#$i8)): New macro.
(ldr____%fp,(%fp,-#$i8)): New macro.
(ldr____%sp,(%fp,-#$i8)): New macro.
(str____%r0,(%fp,+#$i8)): New macro.
(str____%r1,(%fp,+#$i8)): New macro.
(str____%r2,(%fp,+#$i8)): New macro.
(str____%r3,(%fp,+#$i8)): New macro.
(str____%r4,(%fp,+#$i8)): New macro.
(str____%r5,(%fp,+#$i8)): New macro.
(str____%r7,(%fp,+#$i8)): New macro.
(str____%fp,(%fp,+#$i8)): New macro.
(str____%sp,(%fp,+#$i8)): New macro.
(str____%r0,(%fp,-#$i8)): New macro.
(str____%r1,(%fp,-#$i8)): New macro.
(str____%r2,(%fp,-#$i8)): New macro.
(str____%r3,(%fp,-#$i8)): New macro.
(str____%r4,(%fp,-#$i8)): New macro.
(str____%r5,(%fp,-#$i8)): New macro.
(str____%r7,(%fp,-#$i8)): New macro.
(str____%fp,(%fp,-#$i8)): New macro.
(str____%sp,(%fp,-#$i8)): New macro.
(mov____%r0,0x8(%ebp)): Delete macro.
(mov____%r1,0x8(%ebp)): Delete macro.
(mov____%r2,0x8(%ebp)): Delete macro.
(mov____%r3,0x8(%ebp)): Delete macro.
(mov____%r4,0x8(%ebp)): Delete macro.
(mov____%r5,0x8(%ebp)): Delete macro.
(mov____%r7,0x8(%ebp)): Delete macro.
(mov____0x8(%ebp),%r0): Delete macro.
(mov____0x8(%ebp),%r1): Delete macro.
(mov____0x8(%ebp),%r2): Delete macro.
(mov____0x8(%ebp),%r3): Delete macro.
(mov____0x8(%ebp),%r4): Delete macro.
(mov____0x8(%ebp),%r5): Delete macro.
(mov____0x8(%ebp),%r7): Delete macro.
(mov____0x8(%ebp),%ebp): Delete macro.
(mov____0x8(%ebp),%esp): Delete macro.
* module/mescc/armv4/as.scm (armv4:local->r): Use them.
(armv4:r->local+n): Use them.
2019-09-09 18:34:05 +02:00
Danny Milosavljevic 105cf743ff
ARM: Support negative values as immediate.
* lib/arm-mes/arm.M1 (mvn____%r0,$i8): New macro.
(mvn____%r1,$i8): New macro.
(mvn____%r7,$i8): New macro.
* module/mescc/armv4/as.scm (immediate->r0): Use it.
(armv4:value->r): Use it.
2019-09-09 18:34:05 +02:00
Danny Milosavljevic b82a2f1fad
ARM: Make "ret" macro do the right thing.
* lib/arm-mes/arm.M1 (ret): Make it do the right thing.
2019-09-09 18:34:05 +02:00
Danny Milosavljevic 8348e80589
ARM: Fix sub____%r1,%r0 encoding.
* lib/arm-mes/arm.M1 (sub____%r1,%r0): Fix encoding.
2019-09-09 18:34:04 +02:00
Jan Nieuwenhuizen 35c746043f
ARM: Mes C Library: Compile fixes.
* lib/arm-mes-mescc/setjmp.c (setjmp): Do not use x86 registers.
* lib/arm-mes/arm.M1 (uxtb__%r1,%r1): New macro.
2019-09-09 18:34:04 +02:00
Jan Nieuwenhuizen 37149aa84d
porting: arm scaffold WIP 2019-09-09 18:34:00 +02:00
Danny Milosavljevic 01ca0678c1
ARM: Add macro "mov____$i32,%r7".
* lib/arm-mes/arm.M1: Add macro "mov____$i32,%r7".
2019-09-09 18:34:00 +02:00
Danny Milosavljevic 90c9fefeb4
ARM: Fix syscall numbers.
* lib/arm-mes/arm.M1: Fix syscall numbers.
2019-09-09 18:34:00 +02:00
Danny Milosavljevic 7788b9f263
ARM: Fix "bl" macro.
* lib/arm-mes/arm.M1: Fix "bl" macro.
2019-09-09 18:34:00 +02:00
Jan Nieuwenhuizen 92d60477c5
ARM: Mes C Library: Support abort.
* lib/stdlib/abort.c (abort): Support Arm.
* lib/arm-mes/arm.M1 (wfi): New macro.
2019-09-09 18:33:59 +02:00
Danny Milosavljevic 07c907884b
ARM: Fix off-by-one error in "mov____%r0,0x32".
* lib/arm-mes/arm.M1: Fix off-by-one error in "mov____%r0,0x32".
2019-09-09 18:33:59 +02:00
Danny Milosavljevic f29cb12ec4
ARM: Make the ELF headers and footers very similar to x86 again.
* lib/arm-mes/elf32-0header.hex2: Modify.
* lib/arm-mes/elf32-footer-single-main.hex2: Modify.
* lib/arm-mes/elf32-header.hex2: Modify.
2019-09-09 18:33:58 +02:00
Danny Milosavljevic 83e7c4cc9e
ARM: Delete r9-exposing macros.
* lib/arm-mes/arm.M1: Delete r9-exposing macros.
2019-09-09 18:33:58 +02:00
Danny Milosavljevic de9dd28743
ARM: Add macro "mov____%esp,%r0".
* lib/arm-mes/arm.M1: Add macro "mov____%esp,%r0".
2019-09-09 18:33:58 +02:00
Danny Milosavljevic 9283e077b3
ARM: Fix "jmp____*%r1".
* lib/arm-mes/arm.M1: Fix "jmp____*%r1".
2019-09-09 18:33:58 +02:00
Danny Milosavljevic 8f1d2473bc
ARM: Add macro "uxtb__%r1,%r1".
* lib/arm-mes/arm.M1: Add macro "uxtb__%r1,%r1".
2019-09-09 18:33:57 +02:00
Danny Milosavljevic badae1c4c4
ARM: Fix byte-mem-add.
* lib/arm-mes/arm.M1: Add macro "ldrb___%r0,(%r1)".
* module/mescc/armv4/as.scm (armv4:r-byte-mem-add): Use it.
2019-09-09 18:33:57 +02:00
Danny Milosavljevic eebcb57b36
ARM: Add macro "mov____0x32(%ebp),%r0".
* lib/arm-mes/arm.M1: Add macro "mov____0x32(%ebp),%r0".
2019-09-09 18:33:57 +02:00
Danny Milosavljevic 98e5fd7da6
ARM: Add macros like "ldrh___%r?,(%r?)", "strb___%r0,0x8(%ebp)", "push___0",
"add____$i32,%r?", "strb___%r0,0x32(%ebp)".
2019-09-09 18:33:57 +02:00
Danny Milosavljevic 41965ba2e1
ARM: Add "mov____0x8(%ebp),%esp" macro.
* lib/arm-mes/arm.M1: Add "mov____0x8(%ebp),%esp" macro.
2019-09-09 18:33:56 +02:00
Danny Milosavljevic ae53ac4542
ARM: Add "mov____0x8(%ebp),%ebp" macro.
* lib/arm-mes/arm.M1: Add "mov____0x8(%ebp),%ebp" macro.
2019-09-09 18:33:56 +02:00
Danny Milosavljevic 03c0e67a03
ARM: Add macros "mov____%r7,0x8(%ebp)", "mov____0x8(%ebp),%r7".
* lib/arm-mes/arm.M1: Add macros "mov____%r7,0x8(%ebp)", "mov____0x8(%ebp),%r7".
2019-09-09 18:33:56 +02:00
Danny Milosavljevic 50447ce307
ARM: Add macros like "mov??__%r1,$i8".
* lib/arm-mes/arm.M1: Add macros like "mov??__%r1,$i8".
2019-09-09 18:33:56 +02:00
Danny Milosavljevic c65c50b92a
ARM: Add macro "add____$i32,(%r0)".
* lib/arm-mes/arm.M1: Add macro "add____$i32,(%r0)".
2019-09-09 18:33:56 +02:00
Danny Milosavljevic 7e73c7adaf
ARM: Add macro "xchg___%r0,(%esp)".
* lib/arm-mes/arm.M1: Add macro "xchg___%r0,(%esp)".
2019-09-09 18:33:56 +02:00
Danny Milosavljevic f51d3a3356
ARM: Move r9 usage completely into "arm.M1".
* lib/arm-mes/arm.M1: Add "ret" macro.
* module/mescc/armv4/as.scm (armv4:ret): Use it.
* lib/arm-mes/arm.M1: Add macros "lsl____%r0,%r0,$i8", "lsl____%r1,%r1,$i8".
* module/mescc/armv4/as.scm (armv4:shl-r): Use them.
2019-09-09 18:33:55 +02:00
Danny Milosavljevic 8a6092f2b4
ARM: Fix left shifts.
* lib/arm-mes/arm.M1: Add macros "lsl____%r0,%r0,%r9", "lsl____%r1,%r1,%r9",
"mov____$i8,%r9".
* module/mescc/armv4/as.scm (armv4:shl-r): Use them.
2019-09-09 18:33:55 +02:00
Danny Milosavljevic c4c94d68fe
ARM: Fix multiplication.
* lib/arm-mes/arm.M1: Delete "mul____%r1" macro.
Add "mul____%r1,%r0" and "mul____%r0,%r1" macros.
* module/mescc/armv4/as.scm (armv4:r0*r1): Use them.
2019-09-09 18:33:55 +02:00
Danny Milosavljevic b8f617d885
ARM: Add "add____%r0,%r1" macro.
* lib/arm-mes/arm.M1: Add "add____%r0,%r1" macro.
2019-09-09 18:33:54 +02:00
Danny Milosavljevic 0b4a9abafa
ARM: Add "mov____0x32(%ebp),%r1" macro.
* lib/arm-mes/arm.M1: Add "mov____0x32(%ebp),%r1" macro.
2019-09-09 18:33:54 +02:00
Danny Milosavljevic 3147550d19
ARM: Add "strb___%r0,(%r1)" macro.
* lib/arm-mes/arm.M1: Add "strb___%r0,(%r1)" macro.
2019-09-09 18:33:54 +02:00
Danny Milosavljevic 898d74a63b
ARM: Add "mov____$i32,%r0", "mov____$i32,%r1", "mov____$i32,%r2" macros.
* lib/arm-mes/arm.M1: Add "mov____$i32,%r0", "mov____$i32,%r1",
"mov____$i32,%r2" macros.
2019-09-09 18:33:54 +02:00
Danny Milosavljevic f04484fdf3
ARM: Add "mul____%r1" macro.
* lib/arm-mes/arm.M1: Add "mul____%r1" macro.
2019-09-09 18:33:54 +02:00
Danny Milosavljevic ab0124eab7
ARM: Add sxtb__%r1,%r1.
* lib/arm-mes/arm.M1: Add "sxtb__%r1,%r1" macro.
2019-09-09 18:33:53 +02:00
Danny Milosavljevic fd7c2d32cd
ARM: Fix function calls.
* lib/arm-mes/arm.M1: Delete "ret" macro.
Fix "push___%ebp" macro.
Add "pop____%lr" macro.
Add "push___%lr" macro.
Add "mov____%lr,%r9" macro.
Add "mov____%r9,%pc" macro.
* module/mescc/armv4/as.scm (armv4:function-preamble): Push lr, too.
(armv4:ret): Pop lr, too.  Return manually.
2019-09-09 18:33:53 +02:00
Danny Milosavljevic d7576125d2
ARM: Add macros "call___*%r0", "call___*%r1".
* lib/arm-mes/arm.M1: Add macros "call___*%r0", "call___*%r1".
2019-09-09 18:33:52 +02:00
Danny Milosavljevic 2ad76e4ffb
ARM: Delete duplicate macros "mov____0x8(%ebp),%r0", "mov____0x8(%ebp),%r1",
"mov____0x8(%ebp),%r2".

* lib/arm-mes/arm.M1: Delete duplicate macros "mov____0x8(%ebp),%r0",
"mov____0x8(%ebp),%r1", "mov____0x8(%ebp),%r2".
2019-09-09 18:33:52 +02:00
Danny Milosavljevic d456b51e49
ARM: Delete duplicate macro "mov____0x32,%r1".
* lib/arm-mes/arm.M1: Delete duplicate macro "mov____0x32,%r1".
2019-09-09 18:33:52 +02:00
Danny Milosavljevic fc8b4016fb
ARM: Delete duplicate "je" macro.
* lib/arm-mes/arm.M1: Delete duplicate "je" macro.
2019-09-09 18:33:52 +02:00