static void emit_gsave(char *varname, Ctype *ctype, int off) { SAVE; assert(ctype->type != CTYPE_ARRAY); maybe_convert_bool(ctype); char *reg = get_int_reg(ctype, 'a'); char *addr = format("%s+%d(%%rip)", varname, off); maybe_emit_bitshift_save(ctype, addr); emit("mov %%%s, %s", reg, addr); }
static void emit_gsave(char *varname, Type *ty, int off) { SAVE; assert(ty->kind != KIND_ARRAY); maybe_convert_bool(ty); char *reg = get_int_reg(ty, 'a'); char *addr = format("%s+%d(%%rip)", varname, off); maybe_emit_bitshift_save(ty, addr); emit("mov #%s, %s", reg, addr); }
static void emit_lsave(Ctype *ctype, int off) { SAVE; if (ctype->type == CTYPE_FLOAT) { emit("movss %%xmm0, %d(%%rbp)", off); } else if (ctype->type == CTYPE_DOUBLE) { emit("movsd %%xmm0, %d(%%rbp)", off); } else { maybe_convert_bool(ctype); char *reg = get_int_reg(ctype, 'a'); char *addr = format("%d(%%rbp)", off); maybe_emit_bitshift_save(ctype, addr); emit("mov %%%s, %s", reg, addr); } }
static void emit_lsave(Type *ty, int off) { SAVE; if (ty->kind == KIND_FLOAT) { emit("movss #xmm0, %d(#rbp)", off); } else if (ty->kind == KIND_DOUBLE) { emit("movsd #xmm0, %d(#rbp)", off); } else { maybe_convert_bool(ty); char *reg = get_int_reg(ty, 'a'); char *addr = format("%d(%%rbp)", off); maybe_emit_bitshift_save(ty, addr); emit("mov #%s, %s", reg, addr); } }