static void emit_gload(Ctype *ctype, char *label, int off) { SAVE; if (ctype->type == CTYPE_ARRAY) { if (off) emit("lea %s+%d(%%rip), %%rax", label, off); else emit("lea %s(%%rip), %%rax", label); return; } char *inst = get_load_inst(ctype); emit("%s %s+%d(%%rip), %%rax", inst, label, off); maybe_emit_bitshift_load(ctype); }
static void emit_gload(Type *ty, char *label, int off) { SAVE; if (ty->kind == KIND_ARRAY) { if (off) emit("lea %s+%d(#rip), #rax", label, off); else emit("lea %s(#rip), #rax", label); return; } char *inst = get_load_inst(ty); emit("%s %s+%d(#rip), #rax", inst, label, off); maybe_emit_bitshift_load(ty); }
static void emit_lload(Ctype *ctype, char *base, int off) { SAVE; if (ctype->type == CTYPE_ARRAY) { emit("lea %d(%%%s), %%rax", off, base); } else if (ctype->type == CTYPE_FLOAT) { emit("movss %d(%%%s), %%xmm0", off, base); } else if (ctype->type == CTYPE_DOUBLE || ctype->type == CTYPE_LDOUBLE) { emit("movsd %d(%%%s), %%xmm0", off, base); } else { char *inst = get_load_inst(ctype); emit("%s %d(%%%s), %%rax", inst, off, base); maybe_emit_bitshift_load(ctype); } }
static void emit_lload(Type *ty, char *base, int off) { SAVE; if (ty->kind == KIND_ARRAY) { emit("lea %d(#%s), #rax", off, base); } else if (ty->kind == KIND_FLOAT) { emit("movss %d(#%s), #xmm0", off, base); } else if (ty->kind == KIND_DOUBLE || ty->kind == KIND_LDOUBLE) { emit("movsd %d(#%s), #xmm0", off, base); } else { char *inst = get_load_inst(ty); emit("%s %d(#%s), #rax", inst, off, base); maybe_emit_bitshift_load(ty); } }