浏览代码

+ implemented longjmp

florian 22 年之前
父节点
当前提交
fbea62cf74
共有 1 个文件被更改,包括 90 次插入47 次删除
  1. 90 47
      rtl/powerpc/setjump.inc

+ 90 - 47
rtl/powerpc/setjump.inc

@@ -15,63 +15,106 @@
 
 
  **********************************************************************}
  **********************************************************************}
 
 
-{ the necessary code can be copied from the linux kernel sources }
 function setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP'];
 function setjmp(var S : jmp_buf) : longint;assembler;[Public, alias : 'FPC_SETJMP'];
   asm
   asm
-    {$warning FIXME!!!!}
+     stw     r1,0(r3)
+     mflr    r0
+     stw     r2,4(r3)
+     stw     r14,12(r3)
+     stfd    f14,88(r3)
+     stw     r0,8(r3)
+     stw     r15,16(r3)
+     stfd    f15,96(r3)
+     mfcr    r0
+     stw     r16,20(r3)
+     stfd    f16,104(r3)
+     stw     r0,84(r3)
+     stw     r17,24(r3)
+     stfd    f17,112(r3)
+     stw     r18,28(r3)
+     stfd    f18,120(r3)
+     stw     r19,32(r3)
+     stfd    f19,128(r3)
+     stw     r20,36(r3)
+     stfd    f20,136(r3)
+     stw     r21,40(r3)
+     stfd    f21,144(r3)
+     stw     r22,44(r3)
+     stfd    f22,152(r3)
+     stw     r23,48(r3)
+     stfd    f23,160(r3)
+     stw     r24,52(r3)
+     stfd    f24,168(r3)
+     stw     r25,56(r3)
+     stfd    f25,176(r3)
+     stw     r26,60(r3)
+     stfd    f26,184(r3)
+     stw     r27,64(r3)
+     stfd    f27,192(r3)
+     stw     r28,68(r3)
+     stfd    f28,200(r3)
+     stw     r29,72(r3)
+     stfd    f29,208(r3)
+     stw     r30,76(r3)
+     stfd    f30,216(r3)
+     stw     r31,80(r3)
+     stfd    f31,224(r3)
+     li      r3,0
   end;
   end;
 
 
 procedure longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP'];
 procedure longjmp(var S : jmp_buf;value : longint);assembler;[Public, alias : 'FPC_LONGJMP'];
   asm
   asm
-     lwz r1,(r3)
-     lwz r2,4(r3)
-     lwz r0,8(r3)
-     lwz r14,12(r3)
-     lfd fp14,88(r3)
-     lwz r15,16(r3)
-     lfd fp15,96(r3)
-     lwz r16,20(r3)
-     lfd fp16,104(r3)
-     lwz r17,24(r3)
-     lfd fp17,112(r3)
-     lwz r18,28(r3)
-     lfd fp18,120(r3)
-     lwz r19,32(r3)
-     lfd fp19,128(r3)
-     lwz r20,36(r3)
-     lfd fp20,136(r3)
-     mtlr r0
-     lwz r21,40(r3)
-     lfd fp21,144(r3)
-     lwz r22,44(r3)
-     lfd fp22,152(r3)
-     lwz r0,84(r3)
-     lwz r23,48(r3)
-     lfd fp23,160(r3)
-     lwz r24,52(r3)
-     lfd fp24,168(r3)
-     lwz r25,56(r3)
-     lfd fp25,176(r3)
-     mtcrf 0xFF,r0
-     lwz r26,60(r3)
-     lfd fp26,184(r3)
-     lwz r27,64(r3)
-     lfd fp27,192(r3)
-     lwz r28,68(r3)
-     lfd fp28,200(r3)
-     lwz r29,72(r3)
-     lfd fp29,208(r3)
-     lwz r30,76(r3)
-     lfd fp30,216(r3)
-     lwz r31,80(r3)
-     lfd fp31,224(r3)
+     lwz     r1,(r3)
+     lwz     r2,4(r3)
+     lwz     r0,8(r3)
+     lwz     r14,12(r3)
+     lfd     fp14,88(r3)
+     lwz     r15,16(r3)
+     lfd     fp15,96(r3)
+     lwz     r16,20(r3)
+     lfd     fp16,104(r3)
+     lwz     r17,24(r3)
+     lfd     fp17,112(r3)
+     lwz     r18,28(r3)
+     lfd     fp18,120(r3)
+     lwz     r19,32(r3)
+     lfd     fp19,128(r3)
+     lwz     r20,36(r3)
+     lfd     fp20,136(r3)
+     mtlr    r0
+     lwz     r21,40(r3)
+     lfd     fp21,144(r3)
+     lwz     r22,44(r3)
+     lfd     fp22,152(r3)
+     lwz     r0,84(r3)
+     lwz     r23,48(r3)
+     lfd     fp23,160(r3)
+     lwz     r24,52(r3)
+     lfd     fp24,168(r3)
+     lwz     r25,56(r3)
+     lfd     fp25,176(r3)
+     mtcrf   0xff,r0
+     lwz     r26,60(r3)
+     lfd     fp26,184(r3)
+     lwz     r27,64(r3)
+     lfd     fp27,192(r3)
+     lwz     r28,68(r3)
+     lfd     fp28,200(r3)
+     lwz     r29,72(r3)
+     lfd     fp29,208(r3)
+     lwz     r30,76(r3)
+     lfd     fp30,216(r3)
+     lwz     r31,80(r3)
+     lfd     fp31,224(r3)
      mr r3,r4
      mr r3,r4
-     blr
- end;
+    end;
 
 
 {
 {
   $Log$
   $Log$
-  Revision 1.6  2003-04-26 18:54:30  florian
+  Revision 1.7  2003-04-26 19:52:07  florian
+    + implemented longjmp
+
+  Revision 1.6  2003/04/26 18:54:30  florian
     + implemented setjmp record and longjmp
     + implemented setjmp record and longjmp
 
 
   Revision 1.5  2002/09/07 16:01:26  peter
   Revision 1.5  2002/09/07 16:01:26  peter