]> granicus.if.org Git - libx264/commitdiff
aarch64/asm: support offsets in movrel macro
authorJanne Grunau <janne-x264@jannau.net>
Thu, 1 Oct 2020 20:15:18 +0000 (22:15 +0200)
committerJanne Grunau <janne-x264@jannau.net>
Mon, 28 Dec 2020 10:53:34 +0000 (11:53 +0100)
Imported from dav1d.

common/aarch64/asm.S

index 8e4fea996a2464e153ae9af8b7c19a1e795aaad0..59fe293da35a38fe81885166466c2f95a1bd0487 100644 (file)
@@ -101,15 +101,30 @@ MACH    .const_data
 \name:
 .endm
 
-.macro  movrel rd, val
-#if defined(PIC) && defined(__APPLE__)
+.macro  movrel rd, val, offset=0
+#if defined(__APPLE__)
+  .if \offset < 0
         adrp            \rd, \val@PAGE
         add             \rd, \rd, \val@PAGEOFF
-#elif defined(PIC)
+        sub             \rd, \rd, -(\offset)
+  .else
+        adrp            \rd, \val+(\offset)@PAGE
+        add             \rd, \rd, \val+(\offset)@PAGEOFF
+  .endif
+#elif defined(PIC) && defined(_WIN32)
+  .if \offset < 0
         adrp            \rd, \val
         add             \rd, \rd, :lo12:\val
+        sub             \rd, \rd, -(\offset)
+  .else
+        adrp            \rd, \val+(\offset)
+        add             \rd, \rd, :lo12:\val+(\offset)
+  .endif
+#elif defined(PIC)
+        adrp            \rd, \val+(\offset)
+        add             \rd, \rd, :lo12:\val+(\offset)
 #else
-        ldr             \rd, =\val
+        ldr             \rd, =\val+\offset
 #endif
 .endm