#include "../be_dbgout.h"
#include "ia32_emitter.h"
+#include "ia32_common_transform.h"
#include "gen_ia32_emitter.h"
#include "gen_ia32_regalloc_if.h"
#include "ia32_nodes_attr.h"
if (reg == &ia32_gp_regs[REG_GP_NOREG])
panic("trying to emit noreg for %+F input %d", irn, pos);
- /* in case of unknown register: just return a valid register */
- if (reg == &ia32_gp_regs[REG_GP_UKNWN]) {
- const arch_register_req_t *req = arch_get_register_req(irn, pos);
-
- if (arch_register_req_is(req, limited)) {
- /* in case of limited requirements: get the first allowed register */
- unsigned idx = rbitset_next(req->limited, 0, 1);
- reg = arch_register_for_index(req->cls, idx);
- } else {
- /* otherwise get first register in class */
- reg = arch_register_for_index(req->cls, 0);
- }
- }
-
return reg;
}
case 128: be_emit_char('t'); return;
}
} else {
- assert(mode_is_int(mode));
+ assert(mode_is_int(mode) || mode_is_reference(mode));
switch (get_mode_size_bits(mode)) {
case 16: be_emit_char('s'); return;
case 32: be_emit_char('l'); return;
static char get_xmm_mode_suffix(ir_mode *mode)
{
assert(mode_is_float(mode));
- switch(get_mode_size_bits(mode)) {
+ switch (get_mode_size_bits(mode)) {
case 32: return 's';
case 64: return 'd';
default: panic("Invalid XMM mode");
break;
++fmt;
- while (1) {
- switch(*fmt) {
+ for (;;) {
+ switch (*fmt) {
case '*': mod |= EMIT_ALTERNATE_AM; break;
case '#': mod |= EMIT_RESPECT_LS; break;
case 'l': mod |= EMIT_LONG; break;
*/
void ia32_emit_x87_binop(const ir_node *node)
{
- switch(get_ia32_op_type(node)) {
+ switch (get_ia32_op_type(node)) {
case ia32_Normal:
{
const ia32_x87_attr_t *x87_attr = get_ia32_x87_attr_const(node);
int need_parity_label = 0;
const ir_node *proj_true;
const ir_node *proj_false;
- const ir_node *block;
pn_Cmp pnc = get_ia32_condcode(node);
pnc = determine_final_pnc(node, 0, pnc);
proj_false = get_proj(node, pn_ia32_Jcc_false);
assert(proj_false && "Jcc without false Proj");
- block = get_nodes_block(node);
-
if (can_be_fallthrough(proj_true)) {
/* exchange both proj's so the second one can be omitted */
const ir_node *t = proj_true;
c = *(++s);
/* parse modifiers */
- switch(c) {
+ switch (c) {
case 0:
ir_fprintf(stderr, "Warning: asm text (%+F) ends with %%\n", node);
be_emit_char('%');
/* emit it */
if (modifier != 0) {
be_emit_char('%');
- switch(modifier) {
+ switch (modifier) {
case 'b':
reg_name = ia32_get_mapped_reg_name(isa->regs_8bit, reg);
break;
if (s[0] != '\t')
be_emit_char('\t');
- while(*s != 0) {
+ while (*s != 0) {
if (*s == '%') {
s = emit_asm_operand(node, s);
} else {
}
}
-static inline bool is_unknown_reg(const arch_register_t *reg)
-{
- if(reg == &ia32_gp_regs[REG_GP_UKNWN]
- || reg == &ia32_xmm_regs[REG_XMM_UKNWN]
- || reg == &ia32_vfp_regs[REG_VFP_UKNWN])
- return true;
-
- return false;
-}
-
/**
* Emits code for Copy/CopyKeep.
*/
if (in == out) {
return;
}
- if (is_unknown_reg(in))
- return;
/* copies of vf nodes aren't real... */
if (arch_register_get_class(in) == &ia32_reg_classes[CLASS_ia32_vfp])
return;
return 0;
n_cfgpreds = get_Block_n_cfgpreds(block);
- for(i = 0; i < n_cfgpreds; ++i) {
+ for (i = 0; i < n_cfgpreds; ++i) {
const ir_node *pred = get_Block_cfgpred_block(block, i);
double pred_freq = get_block_execfreq(exec_freq, pred);
const arch_register_t *in = get_in_reg(copy, 0);
const arch_register_t *out = get_out_reg(copy, 0);
- if (in == out || is_unknown_reg(in))
+ if (in == out)
return;
/* copies of vf nodes aren't real... */
if (arch_register_get_class(in) == &ia32_reg_classes[CLASS_ia32_vfp])