diff options
author | Jung-uk Kim <jkim@FreeBSD.org> | 2011-08-09 22:56:40 +0000 |
---|---|---|
committer | Jung-uk Kim <jkim@FreeBSD.org> | 2011-08-09 22:56:40 +0000 |
commit | 84b67b4564e60469e3f404cf4b4a5cd7211c1f57 (patch) | |
tree | 3edae630a6604510fb654e5f3bd6a498a094f771 /java/openjdk6/files | |
parent | - Pass maintainership to Eitan Adler (diff) |
- Add an additional patch to support i386 CPUs without CMOV instruction
under ICEDTEA option. [1]
- Chase default Korean font directory change.
PR: ports/158304 [1]
Obtained from: IcedTea Project [1]
Notes
Notes:
svn path=/head/; revision=279374
Diffstat (limited to 'java/openjdk6/files')
-rw-r--r-- | java/openjdk6/files/fontconfig.properties | 8 | ||||
-rw-r--r-- | java/openjdk6/files/icedtea/7032388-work_without_cmov_instruction.patch | 178 |
2 files changed, 182 insertions, 4 deletions
diff --git a/java/openjdk6/files/fontconfig.properties b/java/openjdk6/files/fontconfig.properties index 00b2202ec1b0..0fbfe753edc1 100644 --- a/java/openjdk6/files/fontconfig.properties +++ b/java/openjdk6/files/fontconfig.properties @@ -184,7 +184,7 @@ filename.Sazanami_Gothic=/usr/local/lib/X11/fonts/TTF/sazanami-gothic.ttf filename.Sazanami_Mincho=/usr/local/lib/X11/fonts/TTF/sazanami-mincho.ttf filename.AR_PL_UMing=/usr/local/lib/X11/fonts/TrueType/uming.ttc filename.AR_PL_UKai=/usr/local/lib/X11/fonts/TrueType/ukai.ttc -filename.UnDotum=/usr/local/lib/X11/fonts/TrueType/UnDotum.ttf -filename.UnDotum_Bold=/usr/local/lib/X11/fonts/TrueType/UnDotumBold.ttf -filename.UnBatang=/usr/local/lib/X11/fonts/TrueType/UnBatang.ttf -filename.UnBatang_Bold=/usr/local/lib/X11/fonts/TrueType/UnBatangBold.ttf +filename.UnDotum=/usr/local/lib/X11/fonts/unfonts-core/UnDotum.ttf +filename.UnDotum_Bold=/usr/local/lib/X11/fonts/unfonts-core/UnDotumBold.ttf +filename.UnBatang=/usr/local/lib/X11/fonts/unfonts-core/UnBatang.ttf +filename.UnBatang_Bold=/usr/local/lib/X11/fonts/unfonts-core/UnBatangBold.ttf diff --git a/java/openjdk6/files/icedtea/7032388-work_without_cmov_instruction.patch b/java/openjdk6/files/icedtea/7032388-work_without_cmov_instruction.patch new file mode 100644 index 000000000000..532ad68b9565 --- /dev/null +++ b/java/openjdk6/files/icedtea/7032388-work_without_cmov_instruction.patch @@ -0,0 +1,178 @@ +--- hotspot/src/cpu/x86/vm/assembler_x86.cpp 2011-03-30 11:31:16.408872134 -0700 ++++ hotspot/src/cpu/x86/vm/assembler_x86.cpp 2011-03-30 11:31:16.084614406 -0700 +@@ -7769,6 +7769,28 @@ + } + } + ++void MacroAssembler::cmov32(Condition cc, Register dst, Address src) { ++ if (VM_Version::supports_cmov()) { ++ cmovl(cc, dst, src); ++ } else { ++ Label L; ++ jccb(negate_condition(cc), L); ++ movl(dst, src); ++ bind(L); ++ } ++} ++ ++void MacroAssembler::cmov32(Condition cc, Register dst, Register src) { ++ if (VM_Version::supports_cmov()) { ++ cmovl(cc, dst, src); ++ } else { ++ Label L; ++ jccb(negate_condition(cc), L); ++ movl(dst, src); ++ bind(L); ++ } ++} ++ + void MacroAssembler::verify_oop(Register reg, const char* s) { + if (!VerifyOops) return; + +@@ -9019,14 +9041,7 @@ + movl(result, cnt1); + subl(cnt1, cnt2); + push(cnt1); +- if (VM_Version::supports_cmov()) { +- cmovl(Assembler::lessEqual, cnt2, result); +- } else { +- Label GT_LABEL; +- jccb(Assembler::greater, GT_LABEL); +- movl(cnt2, result); +- bind(GT_LABEL); +- } ++ cmov32(Assembler::lessEqual, cnt2, result); + + // Is the minimum length zero? + testl(cnt2, cnt2); +--- hotspot/src/cpu/x86/vm/assembler_x86.hpp 2011-03-30 11:31:17.757655562 -0700 ++++ hotspot/src/cpu/x86/vm/assembler_x86.hpp 2011-03-30 11:31:17.553920606 -0700 +@@ -2244,10 +2244,13 @@ + + // Data + +- void cmov(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); } ++ void cmov32( Condition cc, Register dst, Address src); ++ void cmov32( Condition cc, Register dst, Register src); + +- void cmovptr(Condition cc, Register dst, Address src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); } +- void cmovptr(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmovl(cc, dst, src)); } ++ void cmov( Condition cc, Register dst, Register src) { cmovptr(cc, dst, src); } ++ ++ void cmovptr(Condition cc, Register dst, Address src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmov32(cc, dst, src)); } ++ void cmovptr(Condition cc, Register dst, Register src) { LP64_ONLY(cmovq(cc, dst, src)) NOT_LP64(cmov32(cc, dst, src)); } + + void movoop(Register dst, jobject obj); + void movoop(Address dst, jobject obj); +--- hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2011-03-30 11:31:18.743456717 -0700 ++++ hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp 2011-03-30 11:31:18.541656202 -0700 +@@ -23,6 +23,7 @@ + */ + + #include "precompiled.hpp" ++#include "asm/assembler.hpp" + #include "c1/c1_Compilation.hpp" + #include "c1/c1_LIRAssembler.hpp" + #include "c1/c1_MacroAssembler.hpp" +@@ -569,24 +570,13 @@ + __ lea (rdi, Address(rdi, rcx, Address::times_2, arrayOopDesc::base_offset_in_bytes(T_CHAR))); + + // compute minimum length (in rax) and difference of lengths (on top of stack) +- if (VM_Version::supports_cmov()) { +- __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes())); +- __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes())); +- __ mov (rcx, rbx); +- __ subptr (rbx, rax); // subtract lengths +- __ push (rbx); // result +- __ cmov (Assembler::lessEqual, rax, rcx); +- } else { +- Label L; +- __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes())); +- __ movl (rcx, Address(rax, java_lang_String::count_offset_in_bytes())); +- __ mov (rax, rbx); +- __ subptr (rbx, rcx); +- __ push (rbx); +- __ jcc (Assembler::lessEqual, L); +- __ mov (rax, rcx); +- __ bind (L); +- } ++ __ movl (rbx, Address(rbx, java_lang_String::count_offset_in_bytes())); ++ __ movl (rax, Address(rax, java_lang_String::count_offset_in_bytes())); ++ __ mov (rcx, rbx); ++ __ subptr(rbx, rax); // subtract lengths ++ __ push (rbx); // result ++ __ cmov (Assembler::lessEqual, rax, rcx); ++ + // is minimum length 0? + Label noLoop, haveResult; + __ testptr (rax, rax); +--- hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp 2011-03-30 11:31:19.824124145 -0700 ++++ hotspot/src/cpu/x86/vm/c1_Runtime1_x86.cpp 2011-03-30 11:31:19.606167752 -0700 +@@ -23,6 +23,7 @@ + */ + + #include "precompiled.hpp" ++#include "asm/assembler.hpp" + #include "c1/c1_Defs.hpp" + #include "c1/c1_MacroAssembler.hpp" + #include "c1/c1_Runtime1.hpp" +--- hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp 2011-03-30 11:31:20.910918826 -0700 ++++ hotspot/src/cpu/x86/vm/templateTable_x86_32.cpp 2011-03-30 11:31:20.703693030 -0700 +@@ -23,6 +23,7 @@ + */ + + #include "precompiled.hpp" ++#include "asm/assembler.hpp" + #include "interpreter/interpreter.hpp" + #include "interpreter/interpreterRuntime.hpp" + #include "interpreter/templateTable.hpp" +@@ -1939,18 +1940,10 @@ + __ movl(temp, Address(array, h, Address::times_8, 0*wordSize)); + __ bswapl(temp); + __ cmpl(key, temp); +- if (VM_Version::supports_cmov()) { +- __ cmovl(Assembler::less , j, h); // j = h if (key < array[h].fast_match()) +- __ cmovl(Assembler::greaterEqual, i, h); // i = h if (key >= array[h].fast_match()) +- } else { +- Label set_i, end_of_if; +- __ jccb(Assembler::greaterEqual, set_i); // { +- __ mov(j, h); // j = h; +- __ jmp(end_of_if); // } +- __ bind(set_i); // else { +- __ mov(i, h); // i = h; +- __ bind(end_of_if); // } +- } ++ // j = h if (key < array[h].fast_match()) ++ __ cmov32(Assembler::less , j, h); ++ // i = h if (key >= array[h].fast_match()) ++ __ cmov32(Assembler::greaterEqual, i, h); + // while (i+1 < j) + __ bind(entry); + __ leal(h, Address(i, 1)); // i+1 +@@ -3478,22 +3471,14 @@ + + // find a free slot in the monitor block (result in rdx) + { Label entry, loop, exit; +- __ movptr(rcx, monitor_block_top); // points to current entry, starting with top-most entry +- __ lea(rbx, monitor_block_bot); // points to word before bottom of monitor block ++ __ movptr(rcx, monitor_block_top); // points to current entry, starting with top-most entry ++ ++ __ lea(rbx, monitor_block_bot); // points to word before bottom of monitor block + __ jmpb(entry); + + __ bind(loop); + __ cmpptr(Address(rcx, BasicObjectLock::obj_offset_in_bytes()), (int32_t)NULL_WORD); // check if current entry is used +- +-// TODO - need new func here - kbt +- if (VM_Version::supports_cmov()) { +- __ cmov(Assembler::equal, rdx, rcx); // if not used then remember entry in rdx +- } else { +- Label L; +- __ jccb(Assembler::notEqual, L); +- __ mov(rdx, rcx); // if not used then remember entry in rdx +- __ bind(L); +- } ++ __ cmovptr(Assembler::equal, rdx, rcx); // if not used then remember entry in rdx + __ cmpptr(rax, Address(rcx, BasicObjectLock::obj_offset_in_bytes())); // check if current entry is for same object + __ jccb(Assembler::equal, exit); // if same object then stop searching + __ addptr(rcx, entry_size); // otherwise advance to next entry |