summaryrefslogtreecommitdiff
path: root/java/openjit/files/patch-rt-X86.c
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjit/files/patch-rt-X86.c')
-rw-r--r--java/openjit/files/patch-rt-X86.c263
1 files changed, 263 insertions, 0 deletions
diff --git a/java/openjit/files/patch-rt-X86.c b/java/openjit/files/patch-rt-X86.c
new file mode 100644
index 000000000000..7da35fc10daf
--- /dev/null
+++ b/java/openjit/files/patch-rt-X86.c
@@ -0,0 +1,263 @@
+$FreeBSD$
+
+--- rt-X86.c.orig Thu Oct 16 20:16:17 2003
++++ rt-X86.c Thu Oct 16 20:22:19 2003
+@@ -127,14 +127,14 @@
+ #define ASM __asm__ volatile
+
+ #ifdef SYM_UNDERSCORE
+-__asm__("
+-_OpenJIT_f2i = OpenJIT_f2i
+-_OpenJIT_d2i = OpenJIT_f2i
+-_OpenJIT_f2l = OpenJIT_f2l
+-_OpenJIT_d2l = OpenJIT_d2l
+-_OpenJIT_invokeinterface_quick = OpenJIT_invokeinterface_quick
+-_throw_internal = throw_internal
+-");
++__asm__(
++"_OpenJIT_f2i = OpenJIT_f2i\n"
++"_OpenJIT_d2i = OpenJIT_f2i\n"
++"_OpenJIT_f2l = OpenJIT_f2l\n"
++"_OpenJIT_d2l = OpenJIT_d2l\n"
++"_OpenJIT_invokeinterface_quick = OpenJIT_invokeinterface_quick\n"
++"_throw_internal = throw_internal\n"
++);
+ #define ASM_TEXT_LABEL(X) __asm__(".text\n_" #X ":\n");
+ #else
+ #define ASM_TEXT_LABEL(X) __asm__(".text\n" #X ":\n");
+@@ -2051,107 +2051,107 @@
+ extern int OpenJIT_d2i(); /* One arg is passed via floating ST(0) */
+ extern int64_t OpenJIT_f2l(float f);
+ extern int64_t OpenJIT_d2l(double d);
+-__asm__("
+-OpenJIT_d2i = OpenJIT_f2i
+-.text
+- .align 4
+- .type OpenJIT_f2i,@function
+-OpenJIT_f2i:
+- pushl %ebp
+- movl %esp,%ebp
+- subl $8,%esp
+- ftst
+- fnstcw -4(%ebp)
+- movl -4(%ebp),%eax
+- movb $0xc,%ah
+- movw %ax,-2(%ebp)
+- fldcw -2(%ebp)
+- fistpl -8(%ebp)
+- fldcw -4(%ebp)
+- movl -8(%ebp),%eax
+- cmp $0x80000000,%eax
+- je IntOverFlow
+- leave
+- ret
+-
+-IntOverFlow:
+- fnstsw
+- sahf
+- jp IntNaN
+- movl $0x80000000,%eax
+- adcl $-1,%eax
+- leave
+- ret
+-IntNaN:
+- xorl %eax,%eax
+- leave
+- ret
+-
+-.text
+- .align 4
+- .type OpenJIT_f2l,@function
+-OpenJIT_f2l:
+- pushl %ebp
+- movl %esp,%ebp
+- subl $12,%esp
+- flds 8(%ebp)
+- ftst
+- fnstcw -4(%ebp)
+- movl -4(%ebp),%eax
+- movb $0xc,%ah
+- movw %ax,-2(%ebp)
+- fldcw -2(%ebp)
+- fistpll -12(%ebp)
+- fldcw -4(%ebp)
+- movl -12(%ebp),%eax
+- movl $0x80000000,%ecx
+- movl -8(%ebp),%edx
+- xorl %edx,%ecx
+- orl %eax,%ecx
+- je LongOverFlow
+- leave
+- ret
+-
+- .align 4
+- .type OpenJIT_d2l,@function
+-OpenJIT_d2l:
+- pushl %ebp
+- movl %esp,%ebp
+- subl $12,%esp
+- fldl 8(%ebp)
+- ftst
+- fnstcw -4(%ebp)
+- movl -4(%ebp),%eax
+- movb $0xc,%ah
+- movw %ax,-2(%ebp)
+- fldcw -2(%ebp)
+- fistpll -12(%ebp)
+- fldcw -4(%ebp)
+- movl -12(%ebp),%eax
+- movl $0x80000000,%ecx
+- movl -8(%ebp),%edx
+- xorl %edx,%ecx
+- orl %eax,%ecx
+- je LongOverFlow
+- leave
+- ret
+-
+-LongOverFlow:
+- fnstsw
+- sahf
+- jp LongNaN
+- movl $0,%eax
+- adcl $-1,%eax
+- adcl $-1,%edx
+- leave
+- ret
+-
+-LongNaN:
+- xorl %eax,%eax
+- xorl %edx,%edx
+- leave
+- ret
+-");
++__asm__(
++"OpenJIT_d2i = OpenJIT_f2i\n"
++".text\n"
++" .align 4\n"
++" .type OpenJIT_f2i,@function\n"
++"OpenJIT_f2i:\n"
++" pushl %ebp\n"
++" movl %esp,%ebp\n"
++" subl $8,%esp\n"
++" ftst\n"
++" fnstcw -4(%ebp)\n"
++" movl -4(%ebp),%eax\n"
++" movb $0xc,%ah\n"
++" movw %ax,-2(%ebp)\n"
++" fldcw -2(%ebp)\n"
++" fistpl -8(%ebp)\n"
++" fldcw -4(%ebp)\n"
++" movl -8(%ebp),%eax\n"
++" cmp $0x80000000,%eax\n"
++" je IntOverFlow\n"
++" leave\n"
++" ret\n"
++"\n"
++"IntOverFlow:\n"
++" fnstsw\n"
++" sahf\n"
++" jp IntNaN\n"
++" movl $0x80000000,%eax\n"
++" adcl $-1,%eax\n"
++" leave\n"
++" ret\n"
++"IntNaN:\n"
++" xorl %eax,%eax\n"
++" leave\n"
++" ret\n"
++"\n"
++".text\n"
++" .align 4\n"
++" .type OpenJIT_f2l,@function\n"
++"OpenJIT_f2l:\n"
++" pushl %ebp\n"
++" movl %esp,%ebp\n"
++" subl $12,%esp\n"
++" flds 8(%ebp)\n"
++" ftst\n"
++" fnstcw -4(%ebp)\n"
++" movl -4(%ebp),%eax\n"
++" movb $0xc,%ah\n"
++" movw %ax,-2(%ebp)\n"
++" fldcw -2(%ebp)\n"
++" fistpll -12(%ebp)\n"
++" fldcw -4(%ebp)\n"
++" movl -12(%ebp),%eax\n"
++" movl $0x80000000,%ecx\n"
++" movl -8(%ebp),%edx\n"
++" xorl %edx,%ecx\n"
++" orl %eax,%ecx\n"
++" je LongOverFlow\n"
++" leave\n"
++" ret\n"
++"\n"
++" .align 4\n"
++" .type OpenJIT_d2l,@function\n"
++"OpenJIT_d2l:\n"
++" pushl %ebp\n"
++" movl %esp,%ebp\n"
++" subl $12,%esp\n"
++" fldl 8(%ebp)\n"
++" ftst\n"
++" fnstcw -4(%ebp)\n"
++" movl -4(%ebp),%eax\n"
++" movb $0xc,%ah\n"
++" movw %ax,-2(%ebp)\n"
++" fldcw -2(%ebp)\n"
++" fistpll -12(%ebp)\n"
++" fldcw -4(%ebp)\n"
++" movl -12(%ebp),%eax\n"
++" movl $0x80000000,%ecx\n"
++" movl -8(%ebp),%edx\n"
++" xorl %edx,%ecx\n"
++" orl %eax,%ecx\n"
++" je LongOverFlow\n"
++" leave\n"
++" ret\n"
++"\n"
++"LongOverFlow:\n"
++" fnstsw\n"
++" sahf\n"
++" jp LongNaN\n"
++" movl $0,%eax\n"
++" adcl $-1,%eax\n"
++" adcl $-1,%edx\n"
++" leave\n"
++" ret\n"
++"\n"
++"LongNaN:\n"
++" xorl %eax,%eax\n"
++" xorl %edx,%edx\n"
++" leave\n"
++" ret\n"
++);
+
+ static int64_t
+ OpenJIT_lshr(int64_t ll, unsigned b)
+@@ -2383,16 +2383,16 @@
+ }
+
+ extern void throw_internal();
+-__asm__("
+-.text
+- .align 4
+- .type throw_internal,@function
+-throw_internal:
+- pushl %eax
+- jmp *%edx
+-.Lfe_throw_internal:
+- .size throw_internal,.Lfe_throw_internal-throw_internal
+-");
++__asm__(
++".text\n"
++" .align 4\n"
++" .type throw_internal,@function\n"
++"throw_internal:\n"
++" pushl %eax\n"
++" jmp *%edx\n"
++".Lfe_throw_internal:\n"
++" .size throw_internal,.Lfe_throw_internal-throw_internal\n"
++);
+
+ #if defined(__linux__)
+ static int signal_nest_count = -1;