summaryrefslogtreecommitdiff
path: root/cgpas.c
diff options
context:
space:
mode:
authorJohn van Groningen2005-01-13 15:17:20 +0000
committerJohn van Groningen2005-01-13 15:17:20 +0000
commit8146556080c7d290814918cffc67e896edefea79 (patch)
tree9c7f05e8d6e2ff514daf5f92247ee7e30a11b0e9 /cgpas.c
parentuse r_to_i_buffer only for PowerPC and not for IA32 (diff)
add divU for the PowerPC
Diffstat (limited to 'cgpas.c')
-rw-r--r--cgpas.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/cgpas.c b/cgpas.c
index b93d84c..3cfa3e0 100644
--- a/cgpas.c
+++ b/cgpas.c
@@ -509,6 +509,7 @@ static unsigned char real_reg_num [32] =
#define as_cmpi(ra,si) store_instruction ((11<<26)|(reg_num(ra)<<16)|((UWORD)(si)))
#define as_cmpl(ra,rb) store_instruction ((31<<26)|(reg_num(ra)<<16)|(reg_num(rb)<<11)|(32<<1))
#define as_divw(rd,ra,rb) as_i_dab (rd,ra,rb,491)
+#define as_divwu(rd,ra,rb) as_i_dab (rd,ra,rb,459)
#define as_bc(i) store_instruction ((16<<26)|(i))
#define as_bcl(i) store_instruction ((16<<26)|1|(i))
#ifdef USE_DCBZ
@@ -1418,6 +1419,16 @@ static void as_div_instruction (struct instruction *instruction)
instruction->instruction_parameters[1].parameter_data.reg.r,reg);
}
+static void as_divu_instruction (struct instruction *instruction)
+{
+ int reg;
+
+ reg=as_register_parameter (instruction->instruction_parameters[0],SIZE_LONG);
+
+ as_divwu (instruction->instruction_parameters[1].parameter_data.reg.r,
+ instruction->instruction_parameters[1].parameter_data.reg.r,reg);
+}
+
static void as_rem_instruction (struct instruction *instruction)
{
int reg;
@@ -2773,6 +2784,9 @@ static void write_instructions (struct instruction *instructions)
case IDIV:
as_div_instruction (instruction);
break;
+ case IDIVU:
+ as_divu_instruction (instruction);
+ break;
case IMOD:
as_rem_instruction (instruction);
break;