|
@@ -221,4 +221,24 @@ lr .req x30 // link register
|
|
|
.long \sym\()_hi32
|
|
|
.endm
|
|
|
|
|
|
+ /*
|
|
|
+ * mov_q - move an immediate constant into a 64-bit register using
|
|
|
+ * between 2 and 4 movz/movk instructions (depending on the
|
|
|
+ * magnitude and sign of the operand)
|
|
|
+ */
|
|
|
+ .macro mov_q, reg, val
|
|
|
+ .if (((\val) >> 31) == 0 || ((\val) >> 31) == 0x1ffffffff)
|
|
|
+ movz \reg, :abs_g1_s:\val
|
|
|
+ .else
|
|
|
+ .if (((\val) >> 47) == 0 || ((\val) >> 47) == 0x1ffff)
|
|
|
+ movz \reg, :abs_g2_s:\val
|
|
|
+ .else
|
|
|
+ movz \reg, :abs_g3:\val
|
|
|
+ movk \reg, :abs_g2_nc:\val
|
|
|
+ .endif
|
|
|
+ movk \reg, :abs_g1_nc:\val
|
|
|
+ .endif
|
|
|
+ movk \reg, :abs_g0_nc:\val
|
|
|
+ .endm
|
|
|
+
|
|
|
#endif /* __ASM_ASSEMBLER_H */
|