Skip to content

Commit

Permalink
2002-05-11 Dietmar Maurer <dietmar@ximian.com>
Browse files Browse the repository at this point in the history
	* x86.brg: bug fix in SHR/SHL

svn path=/trunk/mono/; revision=4518
  • Loading branch information
Dietmar Maurer committed May 11, 2002
1 parent cc5deac commit 9c46530
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 7 deletions.
2 changes: 2 additions & 0 deletions mono/jit/ChangeLog
@@ -1,5 +1,7 @@
2002-05-11 Dietmar Maurer <dietmar@ximian.com> 2002-05-11 Dietmar Maurer <dietmar@ximian.com>


* x86.brg: bug fix in SHR/SHL

* emit-x86.c (arch_emit_prologue): check if live_in_set != NULL * emit-x86.c (arch_emit_prologue): check if live_in_set != NULL


2002-05-11 Sergey Chaban <serge@wildwestsoftware.com> 2002-05-11 Sergey Chaban <serge@wildwestsoftware.com>
Expand Down
30 changes: 23 additions & 7 deletions mono/jit/x86.brg
Expand Up @@ -542,7 +542,6 @@ stmt: STIND_I4 (addr, coni4) {
} }


stmt: STIND_I4 (addr, reg) { stmt: STIND_I4 (addr, reg) {
PRINT_REG ("STIND_I4", tree->right->reg1);


switch (tree->left->data.ainfo.amode) { switch (tree->left->data.ainfo.amode) {


Expand Down Expand Up @@ -1522,15 +1521,20 @@ reg: SHL (reg, coni4) {
} }


reg: SHL (reg, reg) { reg: SHL (reg, reg) {
if (tree->right->reg1 != X86_ECX) if (tree->right->reg1 != X86_ECX) {
x86_push_reg (s->code, X86_ECX);
x86_mov_reg_reg (s->code, X86_ECX, tree->right->reg1, 4); x86_mov_reg_reg (s->code, X86_ECX, tree->right->reg1, 4);
}
x86_shift_reg (s->code, X86_SHL, tree->left->reg1); x86_shift_reg (s->code, X86_SHL, tree->left->reg1);


if (tree->reg1 != tree->left->reg1) if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4); x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);


if (tree->right->reg1 != X86_ECX)
x86_pop_reg (s->code, X86_ECX);

mono_assert (tree->reg1 != X86_ECX && mono_assert (tree->reg1 != X86_ECX &&
tree->left->reg1 != X86_ECX); tree->left->reg1 != X86_ECX);
} }


reg: SHR (reg, coni4) { reg: SHR (reg, coni4) {
Expand All @@ -1541,15 +1545,21 @@ reg: SHR (reg, coni4) {
} }


reg: SHR (reg, reg) { reg: SHR (reg, reg) {
if (tree->right->reg1 != X86_ECX) if (tree->right->reg1 != X86_ECX) {
x86_push_reg (s->code, X86_ECX);
x86_mov_reg_reg (s->code, X86_ECX, tree->right->reg1, 4); x86_mov_reg_reg (s->code, X86_ECX, tree->right->reg1, 4);
}

x86_shift_reg (s->code, X86_SAR, tree->left->reg1); x86_shift_reg (s->code, X86_SAR, tree->left->reg1);


if (tree->reg1 != tree->left->reg1) if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4); x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);


if (tree->right->reg1 != X86_ECX)
x86_pop_reg (s->code, X86_ECX);

mono_assert (tree->reg1 != X86_ECX && mono_assert (tree->reg1 != X86_ECX &&
tree->left->reg1 != X86_ECX); tree->left->reg1 != X86_ECX);
} }


reg: SHR_UN (reg, coni4) { reg: SHR_UN (reg, coni4) {
Expand All @@ -1560,15 +1570,21 @@ reg: SHR_UN (reg, coni4) {
} }


reg: SHR_UN (reg, reg) { reg: SHR_UN (reg, reg) {
if (tree->right->reg1 != X86_ECX) if (tree->right->reg1 != X86_ECX) {
x86_push_reg (s->code, X86_ECX);
x86_mov_reg_reg (s->code, X86_ECX, tree->right->reg1, 4); x86_mov_reg_reg (s->code, X86_ECX, tree->right->reg1, 4);
}

x86_shift_reg (s->code, X86_SHR, tree->left->reg1); x86_shift_reg (s->code, X86_SHR, tree->left->reg1);


if (tree->reg1 != tree->left->reg1) if (tree->reg1 != tree->left->reg1)
x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4); x86_mov_reg_reg (s->code, tree->reg1, tree->left->reg1, 4);


if (tree->right->reg1 != X86_ECX)
x86_pop_reg (s->code, X86_ECX);

mono_assert (tree->reg1 != X86_ECX && mono_assert (tree->reg1 != X86_ECX &&
tree->left->reg1 != X86_ECX); tree->left->reg1 != X86_ECX);
} }


reg: LDSFLDA (coni4) { reg: LDSFLDA (coni4) {
Expand Down
1 change: 1 addition & 0 deletions mono/tests/Makefile.am
Expand Up @@ -71,6 +71,7 @@ TESTSRC= \
indexer.cs \ indexer.cs \
stream.cs \ stream.cs \
console.cs \ console.cs \
shift.cs \
jit-int.cs \ jit-int.cs \
jit-uint.cs \ jit-uint.cs \
jit-long.cs \ jit-long.cs \
Expand Down
17 changes: 17 additions & 0 deletions mono/tests/shift.cs
@@ -0,0 +1,17 @@
using System;

class Test {
public static int Main () {
int [] n = new int [1];
int b = 16;

n [0] = 100 + (1 << (16 - b));
Console.WriteLine (n [0]);

if (n [0] != 101)
return 1;

return 0;
}
}

0 comments on commit 9c46530

Please sign in to comment.