- ir_graph *irg = current_ir_graph;
- ir_node *stack = get_irg_frame(irg);
- ir_node *nomem = get_irg_no_mem(irg);
- ir_node *stf = create_stf(dbgi, block, node, stack, nomem, float_mode,
- NULL, 0, true);
- int bits = get_mode_size_bits(float_mode);
- ir_node *ld;
- set_irn_pinned(stf, op_pin_state_floats);
-
- ld = new_bd_sparc_Ld_imm(dbgi, block, stack, stf, mode_gp, NULL, 0, true);
- set_irn_pinned(ld, op_pin_state_floats);
- result[0] = new_r_Proj(ld, mode_gp, pn_sparc_Ld_res);
-
- if (bits == 64) {
- ir_node *ld2 = new_bd_sparc_Ld_imm(dbgi, block, stack, stf, mode_gp,
- NULL, 4, true);
+ int bits = get_mode_size_bits(float_mode);
+ if (is_Const(value)) {
+ ir_tarval *tv = get_Const_tarval(value);
+ int32_t val = get_tarval_sub_bits(tv, 0) |
+ (get_tarval_sub_bits(tv, 1) << 8) |
+ (get_tarval_sub_bits(tv, 2) << 16) |
+ (get_tarval_sub_bits(tv, 3) << 24);
+ result[0] = create_int_const(block, val);
+ if (bits == 64) {
+ int32_t val = get_tarval_sub_bits(tv, 4) |
+ (get_tarval_sub_bits(tv, 5) << 8) |
+ (get_tarval_sub_bits(tv, 6) << 16) |
+ (get_tarval_sub_bits(tv, 7) << 24);
+ result[1] = create_int_const(block, val);
+ } else {
+ assert(bits == 32);
+ result[1] = NULL;
+ }
+ } else {
+ ir_graph *irg = current_ir_graph;
+ ir_node *stack = get_irg_frame(irg);
+ ir_node *nomem = get_irg_no_mem(irg);
+ ir_node *new_value = be_transform_node(value);
+ ir_node *stf = create_stf(dbgi, block, new_value, stack, nomem,
+ float_mode, NULL, 0, true);
+ ir_node *ld;
+ set_irn_pinned(stf, op_pin_state_floats);
+
+ ld = new_bd_sparc_Ld_imm(dbgi, block, stack, stf, mode_gp, NULL, 0, true);