aboutsummaryrefslogtreecommitdiff
path: root/unix/as.macosx/README
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /unix/as.macosx/README
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'unix/as.macosx/README')
-rw-r--r--unix/as.macosx/README68
1 files changed, 68 insertions, 0 deletions
diff --git a/unix/as.macosx/README b/unix/as.macosx/README
new file mode 100644
index 00000000..d19b2a3e
--- /dev/null
+++ b/unix/as.macosx/README
@@ -0,0 +1,68 @@
+# LinuxPPC Assembler - LinuxPPC 2000, Aug 2000
+
+ .file "zz.c"
+# zsvjmp_(buf,status)
+# int *buf;
+# int *status;
+# {
+# *status = 0;
+# buf[0] = *status;
+# setjmp (&buf[1]);
+# }
+
+gcc2_compiled.:
+ .section ".text"
+ .align 2
+ .globl zsvjmp_
+ .type zsvjmp_,@function
+
+ # Addressing: 12(31) means effective address (EA) is r31+12
+ # lwz 9,12(31) means move value at EA to r9
+
+ # REGISTERS: r1 = stack pointer, r31 = frame pointer, r3+ = args
+ # Function always saves r1, r31 on stack. Sets up frame with
+ # required auto storage. Saves LR as well if any functions will
+ # be called.
+
+zsvjmp_:
+ # -- Push old r1 on stack; start new stack frame at r1
+ stwu 1,-32(1) # Store word with update (push on stack)
+ # EA = r1-32; (r1) -> (EA), EA -> r1
+
+ # -- Save LR, r31 in stack frame
+ mflr 0 # Move from Link Register: LR -> r0
+ stw 31,28(1) # Store word: r31 -> r1+28
+ stw 0,36(1) # Store word: r0 -> r1+36
+
+ # -- Save r3 (arg1), r4 (arg2) on stack
+ mr 31,1 # Move register: r1 -> r31
+ stw 3,8(31) # r3 -> r31+8
+ stw 4,12(31) # r4 -> r31+12
+
+ # -- *status = 0;
+ lwz 9,12(31) # Load word and zero: (r31+12) -> r9
+ li 0,0 # Load zero: 0 -> r0
+ stw 0,0(9) # Store: r0 -> r9+0
+
+ # -- buf[0] = *status;
+ lwz 9,8(31) # buf -> r9
+ lwz 11,12(31) # status -> r11
+ lwz 0,0(11) # *status -> r0
+ stw 0,0(9) # r0 -> buf[0]
+
+ # -- setjmp (&buf[1]);
+ lwz 9,8(31) # buf -> r9
+ addi 0,9,4 # Add immediate; r9+4 -> r0
+ mr 3,0 # R3 is first arg
+ crxor 6,6,6 # Condition reg XOR: xor(b6,b6) -> b6
+ bl setjmp # Branch to setjmp; addr(.L2) -> LR
+.L2:
+ lwz 11,0(1) # load old r1 into r11
+ lwz 0,4(11) # load old LR into r0
+ mtlr 0 # restore return addr to LR
+ lwz 31,-4(11) # restore old r31
+ mr 1,11 # restore old r1
+ blr # Branch unconditionally (to LR addr)
+.Lfe1:
+ .size zsvjmp_,.Lfe1-zsvjmp_
+ .ident "GCC: (GNU) 2.95.2 19991024 (release/franzo)"