diff options
author | John van Groningen | 2015-10-22 13:08:20 +0000 |
---|---|---|
committer | John van Groningen | 2015-10-22 13:08:20 +0000 |
commit | 90a02f720ece4c6d3163246ce17718d3d4d4b5c8 (patch) | |
tree | 6507b7dca1aa161e8d598f8f8ede89b433186120 /armmacros.s | |
parent | workaround bugs and limitations of the llvm assembler (diff) |
add position independent code option (PIC) for ARM
Diffstat (limited to 'armmacros.s')
-rw-r--r-- | armmacros.s | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/armmacros.s b/armmacros.s new file mode 100644 index 0000000..609d4b5 --- /dev/null +++ b/armmacros.s @@ -0,0 +1,76 @@ +
+.ifdef PIC
+
+.macro lao r a i
+ ldr \r,\a\()__o\i
+.endm
+
+.macro otoa r a i
+\a\()__u\i:
+ add \r,\r,pc
+.endm
+
+.macro ldo rd ra a i
+\a\()__u\i:
+ ldr \rd,[pc,\ra]
+.endm
+
+.macro ldosb rd ra a i
+\a\()__u\i:
+ ldrsb \rd,[pc,\ra]
+.endm
+
+.macro sto rd ra a i
+\a\()__u\i:
+ str \rd,[pc,\ra]
+.endm
+
+.macro stob rd ra a i
+\a\()__u\i:
+ strb \rd,[pc,\ra]
+.endm
+
+.macro lto a i
+\a\()__o\i:
+ .long \a\()-(\a\()__u\i\()+8)
+.endm
+
+.macro laol r a l i
+ ldr \r,\l\()__o\i
+.endm
+
+.macro ltol a l i
+\l\()__o\i:
+ .long \a\()-(\l\()__u\i\()+8)
+.endm
+
+.else
+
+.macro lao r a i
+ ldr \r,=\a
+.endm
+
+.macro otoa r a i
+.endm
+
+.macro ldo rd ra a i
+ ldr \rd,[\ra]
+.endm
+
+.macro ldosb rd ra a i
+ ldrsb \rd,[\ra]
+.endm
+
+.macro sto rd ra a i
+ str \rd,[\ra]
+.endm
+
+.macro stob rd ra a i
+ strb \rd,[\ra]
+.endm
+
+.macro laol r a l i
+ ldr \r,=\a
+.endm
+
+.endif
|