Browse Source

* MIPS: emit ".set nomips16" and ".set noreorder" directives for procedures declared as "assembler nostackframe", as it is done for regular procedures. Handwritten assembler routines typically utilize delay slots, and it is desirable that assembler does not mess it up.

git-svn-id: trunk@27847 -
sergei 11 years ago
parent
commit
4202343033
1 changed files with 5 additions and 1 deletions
  1. 5 1
      compiler/mips/cgcpu.pas

+ 5 - 1
compiler/mips/cgcpu.pas

@@ -1199,7 +1199,11 @@ begin
   a_reg_alloc(list,NR_STACK_POINTER_REG);
   a_reg_alloc(list,NR_STACK_POINTER_REG);
 
 
   if nostackframe then
   if nostackframe then
-    exit;
+    begin
+      list.concat(taicpu.op_none(A_P_SET_NOMIPS16));
+      list.concat(taicpu.op_none(A_P_SET_NOREORDER));
+      exit;
+    end;
 
 
   if (pi_needs_stackframe in current_procinfo.flags) then
   if (pi_needs_stackframe in current_procinfo.flags) then
     a_reg_alloc(list,NR_FRAME_POINTER_REG);
     a_reg_alloc(list,NR_FRAME_POINTER_REG);