* param 0-5 in this spaces and then handle va_next by simply
* incrementing the stack pointer
*/
-#define SPARC_IMMEDIATE_MIN -4096
-#define SPARC_IMMEDIATE_MAX 4095
-#define SPARC_MIN_STACKSIZE 92
-#define SPARC_AGGREGATE_RETURN_OFFSET 64
-#define SPARC_PARAMS_SPILL_OFFSET 68
-#define SPARC_N_PARAM_REGS 6
-#define SPARC_STACK_ALIGNMENT 8
+#define SPARC_IMMEDIATE_MIN -4096
+#define SPARC_IMMEDIATE_MAX 4095
+#define SPARC_MIN_STACKSIZE 92
+#define SPARC_AGGREGATE_RETURN_OFFSET 64
+#define SPARC_PARAMS_SPILL_OFFSET 68
+#define SPARC_N_PARAM_REGS 6
+#define SPARC_STACK_ALIGNMENT 8
+#define SPARC_REGISTER_SIZE 4
static inline bool sparc_is_value_imm_encodeable(int32_t value)
{
} else {
param->type = param_type;
param->offset = stack_offset;
- /* increase offset 4 bytes so everything is aligned */
- stack_offset += bits > 32 ? bits/8 : 4;
+ /* increase offset by at least SPARC_REGISTER_SIZE bytes so everything is aligned */
+ stack_offset += bits > 8 * SPARC_REGISTER_SIZE ? bits / 8 : SPARC_REGISTER_SIZE;
continue;
}
param->type = type;
param->offset = stack_offset;
assert(get_mode_size_bits(regmode) == 32);
- stack_offset += 4;
+ stack_offset += SPARC_REGISTER_SIZE;
}
}
}
* the next bigger integer that's evenly divisible by it. */
static unsigned get_aligned_sp_change(unsigned const memperm_arity)
{
- const unsigned bytes = memperm_arity * 4;
+ const unsigned bytes = memperm_arity * SPARC_REGISTER_SIZE;
return round_up2(bytes, SPARC_STACK_ALIGNMENT);
}
/* load from entity */
be_emit_irprintf("\tld [%%fp%+d], %%l%d", offset, i);
be_emit_finish_line_gas(node);
- sp_change += 4;
+ sp_change += SPARC_REGISTER_SIZE;
}
for (i = memperm_arity-1; i >= 0; --i) {
ir_entity *entity = be_get_MemPerm_out_entity(node, i);
int offset = be_get_stack_entity_offset(layout, entity, 0);
- sp_change -= 4;
+ sp_change -= SPARC_REGISTER_SIZE;
/* store to new entity */
be_emit_irprintf("\tst %%l%d, [%%fp%+d]", i, offset);
if (param->reg0 != NULL) {
/* use reserved spill space on between type */
if (entity != NULL) {
- long offset = SPARC_PARAMS_SPILL_OFFSET + i*4;
+ long offset = SPARC_PARAMS_SPILL_OFFSET + i * SPARC_REGISTER_SIZE;
assert(i < SPARC_N_PARAM_REGS);
set_entity_owner(entity, between_type);
set_entity_offset(entity, offset);