- MmioWrite32Macro $Address, $Data\r
- ldr r1, = ($Address)\r
- ldr r0, = ($Data)\r
- str r0, [r1]\r
- MEND\r
-\r
- MACRO\r
- MmioOr32Macro $Address, $OrData\r
- ldr r1, =($Address)\r
- ldr r2, =($OrData)\r
- ldr r0, [r1]\r
- orr r0, r0, r2\r
- str r0, [r1]\r
- MEND\r
-\r
- MACRO\r
- MmioAnd32Macro $Address, $AndData\r
- ldr r1, =($Address)\r
- ldr r2, =($AndData)\r
- ldr r0, [r1]\r
- and r0, r0, r2\r
- str r0, [r1]\r
- MEND\r
-\r
- MACRO\r
- MmioAndThenOr32Macro $Address, $AndData, $OrData\r
- ldr r1, =($Address)\r
- ldr r0, [r1]\r
- ldr r2, =($AndData)\r
- and r0, r0, r2\r
- ldr r2, =($OrData)\r
- orr r0, r0, r2\r
- str r0, [r1]\r
- MEND\r
-\r
- MACRO\r
- MmioWriteFromReg32Macro $Address, $Reg\r
- ldr r1, =($Address)\r
- str $Reg, [r1]\r
- MEND\r
-\r
- MACRO\r
- MmioRead32Macro $Address\r
- ldr r1, =($Address)\r
- ldr r0, [r1]\r
- MEND\r
-\r
- MACRO\r
- MmioReadToReg32Macro $Address, $Reg\r
- ldr r1, =($Address)\r
- ldr $Reg, [r1]\r
- MEND\r
-\r
- MACRO\r
- LoadConstantMacro $Data\r
- ldr r0, =($Data)\r
- MEND\r
-\r
- MACRO\r
- LoadConstantToRegMacro $Data, $Reg\r
- ldr $Reg, =($Data)\r
- MEND\r
-\r
- ; The reserved place must be 8-bytes aligned for pushing 64-bit variable on the stack\r
- ; Note: Global Size will be modified\r
- MACRO\r
- SetPrimaryStack $StackTop, $GlobalSize, $Tmp\r
- and $Tmp, $GlobalSize, #7\r
- rsbne $Tmp, $Tmp, #8\r
- add $GlobalSize, $GlobalSize, $Tmp\r
- sub sp, $StackTop, $GlobalSize\r
-\r
- ; Set all the global variables to 0\r
- mov $Tmp, sp\r
- mov $GlobalSize, #0x0\r
-_SetPrimaryStackInitGlobals\r
- cmp $Tmp, $StackTop\r
- beq _SetPrimaryStackEnd\r
- str $GlobalSize, [$Tmp], #4\r
- b _SetPrimaryStackInitGlobals\r
-_SetPrimaryStackEnd\r
- MEND\r
-\r
- MACRO\r
- InitializePrimaryStack $GlobalSize, $Tmp1\r
- and $Tmp1, $GlobalSize, #7\r
- rsbne $Tmp1, $Tmp1, #8\r
- add $GlobalSize, $GlobalSize, $Tmp1\r
-\r
- mov $Tmp1, sp\r
- sub sp, $GlobalSize\r
- ; Set all the global variables to 0\r
- mov $GlobalSize, #0x0\r
-_InitializePrimaryStackLoop\r
- cmp $Tmp1, sp\r
- bls _InitializePrimaryStackEnd\r
- str $GlobalSize, [$Tmp1, #-4]!\r
- b _InitializePrimaryStackLoop\r
-_InitializePrimaryStackEnd\r
+ adrll $Reg, $Symbol\r
+ add $Reg, pc, #-8\r
+ RELOC R_ARM_ALU_PC_G0_NC, $Symbol\r
+ add $Reg, $Reg, #-4\r
+ RELOC R_ARM_ALU_PC_G1_NC, $Symbol\r
+ add $Reg, $Reg, #0\r
+ RELOC R_ARM_ALU_PC_G2, $Symbol\r
+ MEND\r
+\r
+ MACRO\r
+ ldrl $Reg, $Symbol\r
+ add $Reg, pc, #-8\r
+ RELOC R_ARM_ALU_PC_G0_NC, $Symbol\r
+ add $Reg, $Reg, #-4\r
+ RELOC R_ARM_ALU_PC_G1_NC, $Symbol\r
+ ldr $Reg, [$Reg, #0]\r
+ RELOC R_ARM_LDR_PC_G2, $Symbol\r