projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1ef29af
)
Reduce code duplication and resolve inconsistencies (due to code duplication) in...
author
Christoph Mallon
<christoph.mallon@gmx.de>
Fri, 17 Jun 2011 09:21:39 +0000
(11:21 +0200)
committer
Christoph Mallon
<christoph.mallon@gmx.de>
Fri, 17 Jun 2011 09:21:39 +0000
(11:21 +0200)
ir/be/ia32/ia32_emitter.c
patch
|
blob
|
history
diff --git
a/ir/be/ia32/ia32_emitter.c
b/ir/be/ia32/ia32_emitter.c
index
95838a6
..
d2dddc2
100644
(file)
--- a/
ir/be/ia32/ia32_emitter.c
+++ b/
ir/be/ia32/ia32_emitter.c
@@
-675,6
+675,9
@@
static void ia32_emitf(const ir_node *node, const char *fmt, ...)
end_of_mods:
switch (*fmt++) {
end_of_mods:
switch (*fmt++) {
+ arch_register_t const *reg;
+ ir_node const *imm;
+
case '%':
be_emit_char('%');
break;
case '%':
be_emit_char('%');
break;
@@
-688,17
+691,13
@@
emit_AM:
ia32_emit_am(node);
break;
ia32_emit_am(node);
break;
- case 'R':
{
-
const arch_register_t *
reg = va_arg(ap, const arch_register_t*);
+ case 'R':
+ reg = va_arg(ap, const arch_register_t*);
if (get_ia32_op_type(node) == ia32_AddrModeS) {
goto emit_AM;
} else {
if (get_ia32_op_type(node) == ia32_AddrModeS) {
goto emit_AM;
} else {
- if (mod & EMIT_ALTERNATE_AM)
- be_emit_char('*');
- emit_register(reg, NULL);
+ goto emit_R;
}
}
- break;
- }
case 'S':
if (get_ia32_op_type(node) == ia32_AddrModeS) {
case 'S':
if (get_ia32_op_type(node) == ia32_AddrModeS) {
@@
-714,33
+713,27
@@
emit_AM:
break;
}
break;
}
- case 'D': {
- unsigned pos;
- const arch_register_t *reg;
-
+ case 'D':
if (*fmt < '0' || '9' <= *fmt)
goto unknown;
if (*fmt < '0' || '9' <= *fmt)
goto unknown;
-
- pos = *fmt++ - '0';
- reg = get_out_reg(node, pos);
- emit_register(reg, mod & EMIT_RESPECT_LS ? get_ia32_ls_mode(node) : NULL);
- break;
- }
+ reg = get_out_reg(node, *fmt++ - '0');
+ goto emit_R;
case 'I':
case 'I':
+ imm = node;
+emit_I:
if (!(mod & EMIT_ALTERNATE_AM))
be_emit_char('$');
if (!(mod & EMIT_ALTERNATE_AM))
be_emit_char('$');
- emit_ia32_Immediate_no_prefix(
node
);
+ emit_ia32_Immediate_no_prefix(
imm
);
break;
case 'L':
ia32_emit_cfop_target(node);
break;
break;
case 'L':
ia32_emit_cfop_target(node);
break;
- case 'M':
{
+ case 'M':
ia32_emit_mode_suffix_mode(get_ia32_ls_mode(node));
break;
ia32_emit_mode_suffix_mode(get_ia32_ls_mode(node));
break;
- }
case 'P': {
ia32_condition_code_t cc = va_arg(ap, ia32_condition_code_t);
case 'P': {
ia32_condition_code_t cc = va_arg(ap, ia32_condition_code_t);
@@
-748,8
+741,11
@@
emit_AM:
break;
}
break;
}
- case 'R': {
- const arch_register_t *reg = va_arg(ap, const arch_register_t*);
+ case 'R':
+ reg = va_arg(ap, const arch_register_t*);
+emit_R:
+ if (mod & EMIT_ALTERNATE_AM)
+ be_emit_char('*');
if (mod & EMIT_HIGH_REG) {
emit_8bit_register_high(reg);
} else if (mod & EMIT_LOW_REG) {
if (mod & EMIT_HIGH_REG) {
emit_8bit_register_high(reg);
} else if (mod & EMIT_LOW_REG) {
@@
-758,31
+754,22
@@
emit_AM:
emit_register(reg, mod & EMIT_RESPECT_LS ? get_ia32_ls_mode(node) : NULL);
}
break;
emit_register(reg, mod & EMIT_RESPECT_LS ? get_ia32_ls_mode(node) : NULL);
}
break;
- }
emit_S:
case 'S': {
emit_S:
case 'S': {
- unsigned pos;
- const ir_node *in;
+ unsigned pos;
if (*fmt < '0' || '9' <= *fmt)
goto unknown;
pos = *fmt++ - '0';
if (*fmt < '0' || '9' <= *fmt)
goto unknown;
pos = *fmt++ - '0';
- in = get_irn_n(node, pos);
- if (is_ia32_Immediate(in)) {
- if (!(mod & EMIT_ALTERNATE_AM))
- be_emit_char('$');
- emit_ia32_Immediate_no_prefix(in);
+ imm = get_irn_n(node, pos);
+ if (is_ia32_Immediate(imm)) {
+ goto emit_I;
} else {
} else {
- const arch_register_t *reg;
-
- if (mod & EMIT_ALTERNATE_AM)
- be_emit_char('*');
reg = get_in_reg(node, pos);
reg = get_in_reg(node, pos);
-
emit_register(reg, mod & EMIT_RESPECT_LS ? get_ia32_ls_mode(node) : NULL)
;
+
goto emit_R
;
}
}
- break;
}
case 's': {
}
case 's': {