diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uread.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uread.asm index da3ea3e31e..9aefa808de 100644 --- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uread.asm +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uread.asm @@ -15,6 +15,7 @@ EXPORT __aeabi_uread4 + EXPORT __aeabi_uread8 AREA Uread4, CODE, READONLY @@ -35,4 +36,31 @@ __aeabi_uread4 orr r0, r1, r0, lsl #24 bx lr +; +;UINT64 +;EFIAPI +;__aeabi_uread8 ( +; IN VOID *Pointer +; ); +; +__aeabi_uread8 + mov r3, r0 + + ldrb r1, [r3] + ldrb r2, [r3, #1] + orr r1, r1, r2, lsl #8 + ldrb r2, [r3, #2] + orr r1, r1, r2, lsl #16 + ldrb r0, [r3, #3] + orr r0, r1, r0, lsl #24 + + ldrb r1, [r3, #4] + ldrb r2, [r3, #5] + orr r1, r1, r2, lsl #8 + ldrb r2, [r3, #6] + orr r1, r1, r2, lsl #16 + ldrb r2, [r3, #7] + orr r1, r1, r2, lsl #24 + + bx lr END diff --git a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uwrite.asm b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uwrite.asm index deb0189327..cbf1793af4 100644 --- a/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uwrite.asm +++ b/ArmPkg/Library/CompilerIntrinsicsLib/Arm/uwrite.asm @@ -14,6 +14,7 @@ EXPORT __aeabi_uwrite4 + EXPORT __aeabi_uwrite8 AREA Uwrite4, CODE, READONLY @@ -35,6 +36,31 @@ __aeabi_uwrite4 mov r2, r0, lsr #24 strb r2, [r1, #3] bx lr - + +; +;UINT64 +;EFIAPI +;__aeabi_uwrite8 ( +; IN UINT64 Data, //r0-r1 +; IN VOID *Pointer //r2 +; ); +; +; +__aeabi_uwrite8 + mov r3, r0, lsr #8 + strb r0, [r2] + strb r3, [r2, #1] + mov r3, r0, lsr #16 + strb r3, [r2, #2] + mov r3, r0, lsr #24 + strb r3, [r2, #3] + + mov r3, r1, lsr #8 + strb r1, [r2, #4] + strb r3, [r2, #5] + mov r3, r1, lsr #16 + strb r3, [r2, #6] + mov r3, r1, lsr #24 + strb r3, [r2, #7] END