Mercurial > hg > truffle
comparison src/cpu/x86/vm/macroAssembler_x86.hpp @ 11080:b800986664f4
7088419: Use x86 Hardware CRC32 Instruction with java.util.zip.CRC32
Summary: add intrinsics using new instruction to interpreter, C1, C2, for suitable x86; add test
Reviewed-by: kvn, twisti
author | drchase |
---|---|
date | Tue, 02 Jul 2013 20:42:12 -0400 |
parents | e961c11b85fe |
children | 740e263c80c6 |
comparison
equal
deleted
inserted
replaced
11079:738e04fb1232 | 11080:b800986664f4 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
897 void movdqu(Address dst, XMMRegister src) { Assembler::movdqu(dst, src); } | 897 void movdqu(Address dst, XMMRegister src) { Assembler::movdqu(dst, src); } |
898 void movdqu(XMMRegister dst, Address src) { Assembler::movdqu(dst, src); } | 898 void movdqu(XMMRegister dst, Address src) { Assembler::movdqu(dst, src); } |
899 void movdqu(XMMRegister dst, XMMRegister src) { Assembler::movdqu(dst, src); } | 899 void movdqu(XMMRegister dst, XMMRegister src) { Assembler::movdqu(dst, src); } |
900 void movdqu(XMMRegister dst, AddressLiteral src); | 900 void movdqu(XMMRegister dst, AddressLiteral src); |
901 | 901 |
902 // Move Aligned Double Quadword | |
903 void movdqa(XMMRegister dst, Address src) { Assembler::movdqa(dst, src); } | |
904 void movdqa(XMMRegister dst, XMMRegister src) { Assembler::movdqa(dst, src); } | |
905 void movdqa(XMMRegister dst, AddressLiteral src); | |
906 | |
902 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } | 907 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } |
903 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } | 908 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } |
904 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } | 909 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } |
905 void movsd(XMMRegister dst, AddressLiteral src); | 910 void movsd(XMMRegister dst, AddressLiteral src); |
906 | 911 |
1025 Assembler::vinserti128h(dst, nds, src); | 1030 Assembler::vinserti128h(dst, nds, src); |
1026 else | 1031 else |
1027 Assembler::vinsertf128h(dst, nds, src); | 1032 Assembler::vinsertf128h(dst, nds, src); |
1028 } | 1033 } |
1029 | 1034 |
1035 // Carry-Less Multiplication Quadword | |
1036 void vpclmulldq(XMMRegister dst, XMMRegister nds, XMMRegister src) { | |
1037 // 0x00 - multiply lower 64 bits [0:63] | |
1038 Assembler::vpclmulqdq(dst, nds, src, 0x00); | |
1039 } | |
1040 void vpclmulhdq(XMMRegister dst, XMMRegister nds, XMMRegister src) { | |
1041 // 0x11 - multiply upper 64 bits [64:127] | |
1042 Assembler::vpclmulqdq(dst, nds, src, 0x11); | |
1043 } | |
1044 | |
1030 // Data | 1045 // Data |
1031 | 1046 |
1032 void cmov32( Condition cc, Register dst, Address src); | 1047 void cmov32( Condition cc, Register dst, Address src); |
1033 void cmov32( Condition cc, Register dst, Register src); | 1048 void cmov32( Condition cc, Register dst, Register src); |
1034 | 1049 |
1140 Register rtmp, XMMRegister xtmp); | 1155 Register rtmp, XMMRegister xtmp); |
1141 | 1156 |
1142 void encode_iso_array(Register src, Register dst, Register len, | 1157 void encode_iso_array(Register src, Register dst, Register len, |
1143 XMMRegister tmp1, XMMRegister tmp2, XMMRegister tmp3, | 1158 XMMRegister tmp1, XMMRegister tmp2, XMMRegister tmp3, |
1144 XMMRegister tmp4, Register tmp5, Register result); | 1159 XMMRegister tmp4, Register tmp5, Register result); |
1160 | |
1161 // CRC32 code for java.util.zip.CRC32::updateBytes() instrinsic. | |
1162 void update_byte_crc32(Register crc, Register val, Register table); | |
1163 void kernel_crc32(Register crc, Register buf, Register len, Register table, Register tmp); | |
1164 // Fold 128-bit data chunk | |
1165 void fold_128bit_crc32(XMMRegister xcrc, XMMRegister xK, XMMRegister xtmp, Register buf, int offset); | |
1166 void fold_128bit_crc32(XMMRegister xcrc, XMMRegister xK, XMMRegister xtmp, XMMRegister xbuf); | |
1167 // Fold 8-bit data | |
1168 void fold_8bit_crc32(Register crc, Register table, Register tmp); | |
1169 void fold_8bit_crc32(XMMRegister crc, Register table, XMMRegister xtmp, Register tmp); | |
1145 | 1170 |
1146 #undef VIRTUAL | 1171 #undef VIRTUAL |
1147 | 1172 |
1148 }; | 1173 }; |
1149 | 1174 |