implemented Setup.hs to build boehm cpp libs and install them;
[hs-boehmgc.git] / gc-7.2 / alpha_mach_dep.S
diff --git a/gc-7.2/alpha_mach_dep.S b/gc-7.2/alpha_mach_dep.S
new file mode 100644 (file)
index 0000000..d4def24
--- /dev/null
@@ -0,0 +1,86 @@
+       .arch ev6
+
+        .text
+        .align  4
+        .globl  GC_push_regs
+        .ent    GC_push_regs 2
+GC_push_regs:
+       ldgp    $gp, 0($27)
+       lda     $sp, -16($sp)
+       stq     $26, 0($sp)
+        .mask   0x04000000, 0
+        .frame  $sp, 16, $26, 0
+
+/* $0          integer result                                                */
+/* $1-$8       temp regs - not preserved cross calls                         */
+/* $9-$15      call saved regs                                               */
+/* $16-$21     argument regs - not preserved cross calls                     */
+/* $22-$28     temp regs - not preserved cross calls                         */
+/* $29         global pointer - not preserved cross calls                    */
+/* $30         stack pointer                                                 */
+
+# define call_push(x)                  \
+       mov   x, $16;                   \
+       jsr   $26, GC_push_one;         \
+       ldgp  $gp, 0($26)
+       
+        call_push($9)
+        call_push($10)
+        call_push($11)
+        call_push($12)
+        call_push($13)
+        call_push($14)
+        call_push($15)
+
+/* $f0-$f1     floating point results                                        */
+/* $f2-$f9     call saved regs                                               */
+/* $f10-$f30   temp regs - not preserved cross calls                         */
+
+       /* Use the most efficient transfer method for this hardware. */
+       /* Bit 1 detects the FIX extension, which includes ftoit. */
+       amask   2, $0
+       bne     $0, $use_stack
+
+#undef call_push
+#define call_push(x)                   \
+       ftoit   x, $16;                 \
+       jsr     $26, GC_push_one;       \
+       ldgp    $gp, 0($26)
+
+       call_push($f2)
+       call_push($f3)
+       call_push($f4)
+       call_push($f5)
+       call_push($f6)
+       call_push($f7)
+       call_push($f8)
+       call_push($f9)
+
+       ldq     $26, 0($sp)
+       lda     $sp, 16($sp)
+       ret     $31, ($26), 1
+
+       .align  4
+$use_stack:
+
+#undef call_push
+#define call_push(x)                   \
+       stt     x, 8($sp);              \
+       ldq     $16, 8($sp);            \
+       jsr     $26, GC_push_one;       \
+       ldgp    $gp, 0($26)
+
+       call_push($f2)
+       call_push($f3)
+       call_push($f4)
+       call_push($f5)
+       call_push($f6)
+       call_push($f7)
+       call_push($f8)
+       call_push($f9)
+
+       ldq     $26, 0($sp)
+       lda     $sp, 16($sp)
+       ret     $31, ($26), 1
+
+       .end    GC_push_regs