Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Unified Diff: src/ia32/macro-assembler-ia32.cc

Issue 1768233002: [wasm] Int64Lowering of I64ShrU and I64ShrS on ia32. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Forgot to save a file. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/ia32/macro-assembler-ia32.cc
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc
index 4e421176c0705b267772261e7df2efb8588085ab..074992d7f217e853362352e2a08fddd34008e33a 100644
--- a/src/ia32/macro-assembler-ia32.cc
+++ b/src/ia32/macro-assembler-ia32.cc
@@ -728,6 +728,50 @@ void MacroAssembler::PairShl_cl(Register dst, Register src) {
bind(&done);
}
+void MacroAssembler::PairShr(Register dst, Register src, uint8_t shift) {
titzer 2016/03/07 19:25:35 {dst} and {src} are misnamed. They should be {hi}
ahaas 2016/03/08 07:58:42 Done.
+ if (shift >= 32) {
+ mov(src, dst);
+ shr(src, shift - 32);
+ xor_(dst, dst);
+ } else {
+ shrd(dst, src, shift);
+ shr(dst, shift);
+ }
+}
+
+void MacroAssembler::PairShr_cl(Register dst, Register src) {
+ shrd_cl(dst, src);
+ shr_cl(dst);
+ Label done;
+ test(ecx, Immediate(0x20));
+ j(equal, &done, Label::kNear);
+ mov(src, dst);
+ xor_(dst, dst);
+ bind(&done);
+}
+
+void MacroAssembler::PairSar(Register dst, Register src, uint8_t shift) {
+ if (shift >= 32) {
+ mov(src, dst);
+ sar(src, shift - 32);
+ sar(dst, 31);
+ } else {
+ shrd(dst, src, shift);
+ sar(dst, shift);
+ }
+}
+
+void MacroAssembler::PairSar_cl(Register dst, Register src) {
+ shrd_cl(dst, src);
+ sar_cl(dst);
+ Label done;
+ test(ecx, Immediate(0x20));
+ j(equal, &done, Label::kNear);
+ mov(src, dst);
+ sar(dst, 31);
+ bind(&done);
+}
+
bool MacroAssembler::IsUnsafeImmediate(const Immediate& x) {
static const int kMaxImmediateBits = 17;
if (!RelocInfo::IsNone(x.rmode_)) return false;

Powered by Google App Engine
This is Rietveld 408576698