2
0
Эх сурвалжийг харах

o patch by Nico Erfurth: Optimize some ARM-RTL functions

Use "nostackframe" for:
  - Sptr (broken without nostackframe)
  - get_caller_addr
  - get_caller_frame

Use cmp+ldrne instead of movs+beq+ldr, its a bit more pipeline-friendly
and takes burden of the BPU.

git-svn-id: trunk@20506 -
florian 13 жил өмнө
parent
commit
18866623cd
1 өөрчлөгдсөн 7 нэмэгдсэн , 12 устгасан
  1. 7 12
      rtl/arm/arm.inc

+ 7 - 12
rtl/arm/arm.inc

@@ -106,28 +106,23 @@ end;
 {$ENDIF not INTERNAL_BACKTRACE}
 
 {$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
-function get_caller_addr(framebp:pointer):pointer;assembler;
+function get_caller_addr(framebp:pointer):pointer;assembler;nostackframe;
 asm
-  movs r0,r0
-  beq .Lg_a_null
-  ldr r0,[r0,#-4]
-.Lg_a_null:
+  cmp r0,#0
+  ldrne r0,[r0,#-4]
 end;
 
 
 {$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
-function get_caller_frame(framebp:pointer):pointer;assembler;
+function get_caller_frame(framebp:pointer):pointer;assembler;nostackframe;
 asm
-  movs r0,r0
-  beq .Lgnf_null
-  // see comments in arm/cgcpu.pas, g_proc_entry
-  ldr r0,[r0,#-12]
-.Lgnf_null:
+  cmp r0,#0
+  ldrne r0,[r0,#-12]
 end;
 
 
 {$define FPC_SYSTEM_HAS_SPTR}
-Function Sptr : pointer;assembler;
+Function Sptr : pointer;assembler;nostackframe;
 asm
   mov    r0,sp
 end;