summaryrefslogtreecommitdiff
path: root/cgias.c
diff options
context:
space:
mode:
authorJohn van Groningen2005-10-06 09:37:28 +0000
committerJohn van Groningen2005-10-06 09:37:28 +0000
commit9dfa57d8b8d2466a0fcef6fd28790d317932633e (patch)
treee59f6c3bdc40739558bd4730a4f78049ce1b8c5e /cgias.c
parenttest for GNEG in mark_graph_1 for all platforms (diff)
use new apply and new descriptors for IA32,
add addLU and subLU instructions for IA32
Diffstat (limited to 'cgias.c')
-rw-r--r--cgias.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/cgias.c b/cgias.c
index dd9059d..835559a 100644
--- a/cgias.c
+++ b/cgias.c
@@ -1593,6 +1593,60 @@ static void as_sub_instruction (struct instruction *instruction)
}
}
+static void as_adc_instruction (struct instruction *instruction)
+{
+ switch (instruction->instruction_parameters[0].parameter_type){
+ case P_REGISTER:
+ as_r_r (0023,instruction->instruction_parameters[0].parameter_data.reg.r,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ case P_IMMEDIATE:
+ as_i_r2 (0201,0020,0025,instruction->instruction_parameters[0].parameter_data.i,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ case P_INDIRECT:
+ as_id_r (0023,instruction->instruction_parameters[0].parameter_offset,
+ instruction->instruction_parameters[0].parameter_data.reg.r,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ case P_INDEXED:
+ as_x_r (0023,instruction->instruction_parameters[0].parameter_offset,
+ instruction->instruction_parameters[0].parameter_data.ir,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ default:
+ internal_error_in_function ("as_adc_instruction");
+ return;
+ }
+}
+
+static void as_sbb_instruction (struct instruction *instruction)
+{
+ switch (instruction->instruction_parameters[0].parameter_type){
+ case P_REGISTER:
+ as_r_r (0033,instruction->instruction_parameters[0].parameter_data.reg.r,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ case P_IMMEDIATE:
+ as_i_r2 (0201,0030,0035,instruction->instruction_parameters[0].parameter_data.i,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ case P_INDIRECT:
+ as_id_r (0033,instruction->instruction_parameters[0].parameter_offset,
+ instruction->instruction_parameters[0].parameter_data.reg.r,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ case P_INDEXED:
+ as_x_r (0033,instruction->instruction_parameters[0].parameter_offset,
+ instruction->instruction_parameters[0].parameter_data.ir,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ return;
+ default:
+ internal_error_in_function ("as_sbb_instruction");
+ return;
+ }
+}
+
enum { SIZE_LONG, SIZE_WORD, SIZE_BYTE };
static void as_cmp_i_parameter (int i,struct parameter *parameter)
@@ -4141,6 +4195,12 @@ static void as_instructions (struct instruction *instruction)
case INOT:
as_not_instruction (instruction);
break;
+ case IADC:
+ as_adc_instruction (instruction);
+ break;
+ case ISBB:
+ as_sbb_instruction (instruction);
+ break;
case IMULUD:
as_mulud_instruction (instruction);
break;