projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0d0c27e
)
lower_dw: respect endianess in Conv builtin funcs
author
Matthias Braun
<matze@braunis.de>
Tue, 10 Jan 2012 12:31:16 +0000
(13:31 +0100)
committer
Matthias Braun
<matze@braunis.de>
Tue, 10 Jan 2012 13:13:31 +0000
(14:13 +0100)
ir/lower/lower_dw.c
patch
|
blob
|
history
diff --git
a/ir/lower/lower_dw.c
b/ir/lower/lower_dw.c
index
7dfcf18
..
9ec48d3
100644
(file)
--- a/
ir/lower/lower_dw.c
+++ b/
ir/lower/lower_dw.c
@@
-156,8
+156,13
@@
static ir_type *get_conv_type(ir_mode *imode, ir_mode *omode)
/* set param types and result types */
n_param = 0;
if (imode == env->high_signed) {
/* set param types and result types */
n_param = 0;
if (imode == env->high_signed) {
- set_method_param_type(mtd, n_param++, tp_u);
- set_method_param_type(mtd, n_param++, tp_s);
+ if (env->params->little_endian) {
+ set_method_param_type(mtd, n_param++, tp_u);
+ set_method_param_type(mtd, n_param++, tp_s);
+ } else {
+ set_method_param_type(mtd, n_param++, tp_s);
+ set_method_param_type(mtd, n_param++, tp_u);
+ }
} else if (imode == env->high_unsigned) {
set_method_param_type(mtd, n_param++, tp_u);
set_method_param_type(mtd, n_param++, tp_u);
} else if (imode == env->high_unsigned) {
set_method_param_type(mtd, n_param++, tp_u);
set_method_param_type(mtd, n_param++, tp_u);
@@
-168,8
+173,13
@@
static ir_type *get_conv_type(ir_mode *imode, ir_mode *omode)
n_res = 0;
if (omode == env->high_signed) {
n_res = 0;
if (omode == env->high_signed) {
- set_method_res_type(mtd, n_res++, tp_u);
- set_method_res_type(mtd, n_res++, tp_s);
+ if (env->params->little_endian) {
+ set_method_res_type(mtd, n_res++, tp_u);
+ set_method_res_type(mtd, n_res++, tp_s);
+ } else {
+ set_method_res_type(mtd, n_res++, tp_s);
+ set_method_res_type(mtd, n_res++, tp_u);
+ }
} else if (omode == env->high_unsigned) {
set_method_res_type(mtd, n_res++, tp_u);
set_method_res_type(mtd, n_res++, tp_u);
} else if (omode == env->high_unsigned) {
set_method_res_type(mtd, n_res++, tp_u);
set_method_res_type(mtd, n_res++, tp_u);
@@
-1492,8
+1502,13
@@
static void lower_Conv_to_Ll(ir_node *node)
set_irn_pinned(call, get_irn_pinned(node));
irn = new_r_Proj(call, mode_T, pn_Call_T_result);
set_irn_pinned(call, get_irn_pinned(node));
irn = new_r_Proj(call, mode_T, pn_Call_T_result);
- res_low = new_r_Proj(irn, low_unsigned, 0);
- res_high = new_r_Proj(irn, low_signed, 1);
+ if (env->params->little_endian) {
+ res_low = new_r_Proj(irn, low_unsigned, 0);
+ res_high = new_r_Proj(irn, low_signed, 1);
+ } else {
+ res_low = new_r_Proj(irn, low_unsigned, 1);
+ res_high = new_r_Proj(irn, low_signed, 0);
+ }
}
ir_set_dw_lowered(node, res_low, res_high);
}
}
ir_set_dw_lowered(node, res_low, res_high);
}
@@
-1531,8
+1546,13
@@
static void lower_Conv_from_Ll(ir_node *node)
ir_node *res;
irn = get_intrinsic_address(mtp, get_irn_op(node), imode, omode);
ir_node *res;
irn = get_intrinsic_address(mtp, get_irn_op(node), imode, omode);
- in[0] = entry->low_word;
- in[1] = entry->high_word;
+ if (env->params->little_endian) {
+ in[0] = entry->low_word;
+ in[1] = entry->high_word;
+ } else {
+ in[0] = entry->high_word;
+ in[1] = entry->low_word;
+ }
call = new_rd_Call(dbg, block, get_irg_no_mem(irg), irn, 2, in, mtp);
set_irn_pinned(call, get_irn_pinned(node));
call = new_rd_Call(dbg, block, get_irg_no_mem(irg), irn, 2, in, mtp);
set_irn_pinned(call, get_irn_pinned(node));