diff options
author | John van Groningen | 2005-10-06 09:37:28 +0000 |
---|---|---|
committer | John van Groningen | 2005-10-06 09:37:28 +0000 |
commit | 9dfa57d8b8d2466a0fcef6fd28790d317932633e (patch) | |
tree | e59f6c3bdc40739558bd4730a4f78049ce1b8c5e /cgias.c | |
parent | test 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.c | 60 |
1 files changed, 60 insertions, 0 deletions
@@ -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; |