comparison src/cpu/x86/vm/assembler_x86.cpp @ 1914:ae065c367d93

6987135: Performance regression on Intel platform with 32-bits edition between 6u13 and 6u14. Summary: Use hardware DIV instruction for long division by constant when it is faster than code with multiply. Reviewed-by: never
author kvn
date Tue, 02 Nov 2010 09:00:37 -0700
parents d55217dc206f
children 2fe998383789
comparison
equal deleted inserted replaced
1913:3b2dea75431e 1914:ae065c367d93
1286 void Assembler::imull(Register dst, Register src, int value) { 1286 void Assembler::imull(Register dst, Register src, int value) {
1287 int encode = prefix_and_encode(dst->encoding(), src->encoding()); 1287 int encode = prefix_and_encode(dst->encoding(), src->encoding());
1288 if (is8bit(value)) { 1288 if (is8bit(value)) {
1289 emit_byte(0x6B); 1289 emit_byte(0x6B);
1290 emit_byte(0xC0 | encode); 1290 emit_byte(0xC0 | encode);
1291 emit_byte(value); 1291 emit_byte(value & 0xFF);
1292 } else { 1292 } else {
1293 emit_byte(0x69); 1293 emit_byte(0x69);
1294 emit_byte(0xC0 | encode); 1294 emit_byte(0xC0 | encode);
1295 emit_long(value); 1295 emit_long(value);
1296 } 1296 }
3901 void Assembler::imulq(Register dst, Register src, int value) { 3901 void Assembler::imulq(Register dst, Register src, int value) {
3902 int encode = prefixq_and_encode(dst->encoding(), src->encoding()); 3902 int encode = prefixq_and_encode(dst->encoding(), src->encoding());
3903 if (is8bit(value)) { 3903 if (is8bit(value)) {
3904 emit_byte(0x6B); 3904 emit_byte(0x6B);
3905 emit_byte(0xC0 | encode); 3905 emit_byte(0xC0 | encode);
3906 emit_byte(value); 3906 emit_byte(value & 0xFF);
3907 } else { 3907 } else {
3908 emit_byte(0x69); 3908 emit_byte(0x69);
3909 emit_byte(0xC0 | encode); 3909 emit_byte(0xC0 | encode);
3910 emit_long(value); 3910 emit_long(value);
3911 } 3911 }