compiler->used_regs[i] = 0;
}
- compiler->tmpreg = X86_XMM0;
- compiler->valid_regs[compiler->tmpreg] = 0;
-
compiler->gp_tmpreg = X86_ECX;
compiler->valid_regs[compiler->gp_tmpreg] = 0;
{
int i;
int src;
+ int tmp;
for(i=0;i<ORC_N_VARIABLES;i++){
OrcVariable *var = compiler->vars + i;
switch (compiler->vars[i].vartype) {
case ORC_VAR_TYPE_ACCUMULATOR:
src = compiler->vars[i].alloc;
+ tmp = orc_compiler_get_temp_reg (compiler);
#ifndef MMX
- orc_sse_emit_pshufd (compiler, ORC_SSE_SHUF(3,2,3,2), src, compiler->tmpreg);
+ orc_sse_emit_pshufd (compiler, ORC_SSE_SHUF(3,2,3,2), src, tmp);
#else
- orc_mmx_emit_pshufw (compiler, ORC_MMX_SHUF(3,2,3,2), src, compiler->tmpreg);
+ orc_mmx_emit_pshufw (compiler, ORC_MMX_SHUF(3,2,3,2), src, tmp);
#endif
if (compiler->vars[i].size == 2) {
- orc_sse_emit_660f (compiler, "paddw", 0xfd, compiler->tmpreg, src);
+ orc_sse_emit_660f (compiler, "paddw", 0xfd, tmp, src);
} else {
- orc_sse_emit_660f (compiler, "paddd", 0xfe, compiler->tmpreg, src);
+ orc_sse_emit_660f (compiler, "paddd", 0xfe, tmp, src);
}
#ifndef MMX
- orc_sse_emit_pshufd (compiler, ORC_SSE_SHUF(1,1,1,1), src, compiler->tmpreg);
+ orc_sse_emit_pshufd (compiler, ORC_SSE_SHUF(1,1,1,1), src, tmp);
if (compiler->vars[i].size == 2) {
- orc_sse_emit_660f (compiler, "paddw", 0xfd, compiler->tmpreg, src);
+ orc_sse_emit_660f (compiler, "paddw", 0xfd, tmp, src);
} else {
- orc_sse_emit_660f (compiler, "paddd", 0xfe, compiler->tmpreg, src);
+ orc_sse_emit_660f (compiler, "paddd", 0xfe, tmp, src);
}
#endif
if (compiler->vars[i].size == 2) {
#ifndef MMX
- orc_sse_emit_pshuflw (compiler, ORC_SSE_SHUF(1,1,1,1), src, compiler->tmpreg);
+ orc_sse_emit_pshuflw (compiler, ORC_SSE_SHUF(1,1,1,1), src, tmp);
#else
- orc_mmx_emit_pshufw (compiler, ORC_MMX_SHUF(1,1,1,1), src, compiler->tmpreg);
+ orc_mmx_emit_pshufw (compiler, ORC_MMX_SHUF(1,1,1,1), src, tmp);
#endif
- orc_sse_emit_660f (compiler, "paddw", 0xfd, compiler->tmpreg, src);
+ orc_sse_emit_660f (compiler, "paddw", 0xfd, tmp, src);
}
if (compiler->vars[i].size == 2) {
OrcVariable *dest = compiler->vars + insn->dest_args[0];
int ptr_reg;
int offset = 0;
- int tmp = compiler->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (compiler);
offset = compiler->offset * src->size;
if (src->ptr_register == 0) {
int src1 = p->vars[insn->src_args[0]].alloc;
int src2 = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
#ifndef MMX
int tmp2 = orc_compiler_get_temp_reg (p);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (src != dest) {
orc_sse_emit_movdqa (p, src, dest);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (src != dest) {
orc_sse_emit_movdqa (p, src, dest);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (src == dest) {
orc_sse_emit_movdqa (p, src, tmp);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (src == dest) {
orc_sse_emit_movdqa (p, src, tmp);
p->vars[insn->src_args[1]].value,
p->vars[insn->dest_args[0]].alloc);
} else if (p->vars[insn->src_args[1]].vartype == ORC_VAR_TYPE_PARAM) {
+ int tmp = orc_compiler_get_temp_reg (p);
+
/* FIXME this is a gross hack to reload the register with a
* 64-bit version of the parameter. */
orc_x86_emit_mov_memoffset_sse (p, 4,
(int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->src_args[1]]),
- p->exec_reg, p->tmpreg, FALSE);
+ p->exec_reg, tmp, FALSE);
- orc_sse_emit_660f (p, code[type], reg_code[type],
- p->tmpreg,
+ orc_sse_emit_660f (p, code[type], reg_code[type], tmp,
p->vars[insn->dest_args[0]].alloc);
} else {
ORC_COMPILER_ERROR(p,"rule only works with constants or params");
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (p->vars[insn->src_args[1]].vartype == ORC_VAR_TYPE_CONST) {
orc_sse_emit_movdqa (p, src, tmp);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* FIXME need a zero register */
if (0) {
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, src, tmp);
orc_sse_emit_movdqa (p, src, dest);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* FIXME need a zero register */
if (0) {
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (src != dest) {
orc_sse_emit_movdqa (p, src, dest);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_punpcklbw (p, src, tmp);
orc_sse_emit_psraw (p, 8, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_punpcklbw (p, src, tmp);
orc_sse_emit_psrlw (p, 8, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
int tmp2 = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, dest, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
int tmp2 = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, src, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
int tmp2 = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, src, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, dest, tmp);
orc_sse_emit_pmulhw (p, src, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, dest, tmp);
orc_sse_emit_pmulhuw (p, src, tmp);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (src != dest) {
orc_sse_emit_movdqa (p, src, dest);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
if (src != dest) {
orc_sse_emit_movdqa (p, src, dest);
static void
sse_emit_load_mask (OrcCompiler *p, unsigned int mask1, unsigned int mask2)
{
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
int gptmp = p->gp_tmpreg;
int tmp2 = orc_compiler_get_temp_reg (p);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
sse_emit_load_mask (p, 0x02030001, 0x0c080400);
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* FIXME slow */
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* FIXME slow */
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* FIXME slow */
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* FIXME slow */
{
int src = p->vars[insn->src_args[0]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* FIXME slow */
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
tmp = orc_compiler_get_constant (p, 2, 0x8000);
orc_sse_emit_pxor(p, tmp, src);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, dest, tmp);
orc_sse_emit_pcmpgtb (p, src, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, src, tmp);
orc_sse_emit_pcmpgtb (p, dest, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, dest, tmp);
orc_sse_emit_pcmpgtd (p, src, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, src, tmp);
orc_sse_emit_pcmpgtd (p, dest, tmp);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* (a+b+1) >> 1 = (a|b) - ((a^b)>>1) */
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
/* (a+b+1) >> 1 = (a|b) - ((a^b)>>1) */
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
#if 0
int tmp2 = orc_compiler_get_temp_reg (p);
int tmp3 = orc_compiler_get_temp_reg (p);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
int tmp2 = orc_compiler_get_temp_reg (p);
int tmp3 = orc_compiler_get_temp_reg (p);
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
int tmp2 = orc_compiler_get_temp_reg (p);
#if 0
{
int src = p->vars[insn->src_args[1]].alloc;
int dest = p->vars[insn->dest_args[0]].alloc;
- int tmp = p->tmpreg;
+ int tmp = orc_compiler_get_temp_reg (p);
int tmp2 = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p, src, tmp2);
p->vars[insn->src_args[1]].alloc,
p->vars[insn->dest_args[0]].alloc);
} else {
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p,
p->vars[insn->src_args[1]].alloc,
- p->tmpreg);
+ tmp);
orc_sse_emit_0f (p, "minps", 0x5d,
p->vars[insn->dest_args[0]].alloc,
- p->tmpreg);
+ tmp);
orc_sse_emit_0f (p, "minps", 0x5d,
p->vars[insn->src_args[1]].alloc,
p->vars[insn->dest_args[0]].alloc);
orc_sse_emit_por (p,
- p->tmpreg,
+ tmp,
p->vars[insn->dest_args[0]].alloc);
}
}
p->vars[insn->src_args[1]].alloc,
p->vars[insn->dest_args[0]].alloc);
} else {
+ int tmp = orc_compiler_get_temp_reg (p);
orc_sse_emit_movdqa (p,
p->vars[insn->src_args[1]].alloc,
- p->tmpreg);
+ tmp);
orc_sse_emit_0f (p, "maxps", 0x5f,
p->vars[insn->dest_args[0]].alloc,
- p->tmpreg);
+ tmp);
orc_sse_emit_0f (p, "maxps", 0x5f,
p->vars[insn->src_args[1]].alloc,
p->vars[insn->dest_args[0]].alloc);
orc_sse_emit_por (p,
- p->tmpreg,
+ tmp,
p->vars[insn->dest_args[0]].alloc);
}
}