Mercurial > hg > truffle
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 } |