Skip to content

Commit 91d9349

Browse files
committed
mmx: update from sse
1 parent 4152b3b commit 91d9349

File tree

5 files changed

+285
-310
lines changed

5 files changed

+285
-310
lines changed

examples/volscale.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ mmx_rule_mulhslw (OrcCompiler *p, void *user, OrcInstruction *insn)
3030
orc_mmx_emit_movq (p, src2, tmp2);
3131
orc_mmx_emit_pmulhw (p, src1, src2); /* .. | 0 | vl*p0 | */
3232
orc_mmx_emit_paddw (p, tmp1, src2); /* .. | 0 | vl*p0 | + sign correct */
33-
orc_mmx_emit_psrld (p, 16, dest); /* .. | 0 | vh | */
33+
orc_mmx_emit_psrld_imm (p, 16, dest); /* .. | 0 | vh | */
3434
orc_mmx_emit_pmaddwd (p, tmp2, dest); /* .. | p0 * vh | */
3535
orc_mmx_emit_paddd (p, src2, dest); /* .. | p0 * v0 | */
3636
}

orc/orcmmx.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ orc_mmx_emit_pinsrw_memoffset (OrcCompiler *p, int imm, int offset,
112112
int src, int dest)
113113
{
114114
ORC_ASM_CODE(p," pinsrw $%d, %d(%%%s), %%%s\n", imm, offset,
115-
orc_x86_get_regname(src),
115+
orc_x86_get_regname_ptr(p, src),
116116
orc_x86_get_regname_mmx(dest));
117117
orc_x86_emit_rex (p, 0, dest, 0, src);
118118
*p->codeptr++ = 0x0f;
119119
*p->codeptr++ = 0xc4;
120-
orc_x86_emit_modrm_memoffset (p, dest, offset, src);
120+
orc_x86_emit_modrm_memoffset (p, offset, src, dest);
121121
*p->codeptr++ = imm;
122122

123123
}
@@ -127,12 +127,12 @@ orc_mmx_emit_pextrw_memoffset (OrcCompiler *p, int imm, int src,
127127
int offset, int dest)
128128
{
129129
ORC_ASM_CODE(p," pextrw $%d, %%%s, %d(%%%s)\n", imm,
130-
orc_x86_get_regname(src),
130+
orc_x86_get_regname_ptr(p, src),
131131
offset, orc_x86_get_regname_mmx(dest));
132132
orc_x86_emit_rex (p, 0, src, 0, dest);
133133
*p->codeptr++ = 0x0f;
134134
*p->codeptr++ = 0xc4;
135-
orc_x86_emit_modrm_memoffset (p, src, offset, dest);
135+
orc_x86_emit_modrm_memoffset (p, offset, dest, src);
136136
*p->codeptr++ = imm;
137137
}
138138

@@ -201,7 +201,7 @@ orc_x86_emit_mov_memoffset_mmx (OrcCompiler *compiler, int size, int offset,
201201
ORC_COMPILER_ERROR(compiler, "bad size");
202202
break;
203203
}
204-
orc_x86_emit_modrm_memoffset (compiler, reg2, offset, reg1);
204+
orc_x86_emit_modrm_memoffset (compiler, offset, reg1, reg2);
205205
}
206206

207207
void
@@ -228,7 +228,7 @@ orc_x86_emit_mov_mmx_memoffset (OrcCompiler *compiler, int size, int reg1, int o
228228
break;
229229
}
230230

231-
orc_x86_emit_modrm_memoffset (compiler, reg1, offset, reg2);
231+
orc_x86_emit_modrm_memoffset (compiler, offset, reg2, reg1);
232232
}
233233

234234
void orc_x86_emit_mov_mmx_reg_reg (OrcCompiler *compiler, int reg1, int reg2)

orc/orcmmx.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,16 @@ void orc_mmx_load_constant (OrcCompiler *compiler, int reg, int size,
8989

9090
#define orc_mmx_emit_movq(p,a,b) orc_mmx_emit_660f (p, "movq", 0x6f, a, b)
9191

92-
#define orc_mmx_emit_psraw(p,a,b) orc_mmx_emit_shiftimm (p, "psraw", 0x71, 4, a, b)
93-
#define orc_mmx_emit_psrlw(p,a,b) orc_mmx_emit_shiftimm (p, "psrlw", 0x71, 2, a, b)
94-
#define orc_mmx_emit_psllw(p,a,b) orc_mmx_emit_shiftimm (p, "psllw", 0x71, 6, a, b)
92+
#define orc_mmx_emit_psraw_imm(p,a,b) orc_mmx_emit_shiftimm (p, "psraw", 0x71, 4, a, b)
93+
#define orc_mmx_emit_psrlw_imm(p,a,b) orc_mmx_emit_shiftimm (p, "psrlw", 0x71, 2, a, b)
94+
#define orc_mmx_emit_psllw_imm(p,a,b) orc_mmx_emit_shiftimm (p, "psllw", 0x71, 6, a, b)
9595

96-
#define orc_mmx_emit_psrad(p,a,b) orc_mmx_emit_shiftimm (p, "psrad", 0x72, 4, a, b)
97-
#define orc_mmx_emit_psrld(p,a,b) orc_mmx_emit_shiftimm (p, "psrld", 0x72, 2, a, b)
98-
#define orc_mmx_emit_pslld(p,a,b) orc_mmx_emit_shiftimm (p, "pslld", 0x72, 6, a, b)
96+
#define orc_mmx_emit_psrad_imm(p,a,b) orc_mmx_emit_shiftimm (p, "psrad", 0x72, 4, a, b)
97+
#define orc_mmx_emit_psrld_imm(p,a,b) orc_mmx_emit_shiftimm (p, "psrld", 0x72, 2, a, b)
98+
#define orc_mmx_emit_pslld_imm(p,a,b) orc_mmx_emit_shiftimm (p, "pslld", 0x72, 6, a, b)
9999

100-
#define orc_mmx_emit_psrlq(p,a,b) orc_mmx_emit_shiftimm (p, "psrlq", 0x73, 2, a, b)
101-
#define orc_mmx_emit_psllq(p,a,b) orc_mmx_emit_shiftimm (p, "psllq", 0x73, 6, a, b)
100+
#define orc_mmx_emit_psrlq_imm(p,a,b) orc_mmx_emit_shiftimm (p, "psrlq", 0x73, 2, a, b)
101+
#define orc_mmx_emit_psllq_imm(p,a,b) orc_mmx_emit_shiftimm (p, "psllq", 0x73, 6, a, b)
102102

103103
#define orc_mmx_emit_pcmpeqb(p,a,b) orc_mmx_emit_660f (p, "pcmpeqb", 0x74, a, b)
104104
#define orc_mmx_emit_pcmpeqw(p,a,b) orc_mmx_emit_660f (p, "pcmpeqw", 0x75, a, b)

orc/orcprogram-mmx.c

+9-9
Original file line numberDiff line numberDiff line change
@@ -292,18 +292,18 @@ mmx_save_accumulators (OrcCompiler *compiler)
292292
#endif
293293

294294
if (compiler->vars[i].size == 2) {
295-
orc_mmx_emit_660f (compiler, "paddw", 0xfd, tmp, src);
295+
orc_mmx_emit_paddw (compiler, tmp, src);
296296
} else {
297-
orc_mmx_emit_660f (compiler, "paddd", 0xfe, tmp, src);
297+
orc_mmx_emit_paddd (compiler, tmp, src);
298298
}
299299

300300
#ifndef MMX
301301
orc_mmx_emit_pshufd (compiler, ORC_MMX_SHUF(1,1,1,1), src, tmp);
302302

303303
if (compiler->vars[i].size == 2) {
304-
orc_mmx_emit_660f (compiler, "paddw", 0xfd, tmp, src);
304+
orc_mmx_emit_paddw (compiler, tmp, src);
305305
} else {
306-
orc_mmx_emit_660f (compiler, "paddd", 0xfe, tmp, src);
306+
orc_mmx_emit_paddd (compiler, tmp, src);
307307
}
308308
#endif
309309

@@ -314,7 +314,7 @@ mmx_save_accumulators (OrcCompiler *compiler)
314314
orc_mmx_emit_pshufw (compiler, ORC_MMX_SHUF(1,1,1,1), src, tmp);
315315
#endif
316316

317-
orc_mmx_emit_660f (compiler, "paddw", 0xfd, tmp, src);
317+
orc_mmx_emit_paddw (compiler, tmp, src);
318318
}
319319

320320
if (compiler->vars[i].size == 2) {
@@ -402,13 +402,13 @@ orc_mmx_load_constant (OrcCompiler *compiler, int reg, int size, orc_uint64 valu
402402
v = (0xffffffff<<i);
403403
if (value == v) {
404404
orc_mmx_emit_pcmpeqb (compiler, reg, reg);
405-
orc_mmx_emit_pslld (compiler, i, reg);
405+
orc_mmx_emit_pslld_imm (compiler, i, reg);
406406
return;
407407
}
408408
v = (0xffffffff>>i);
409409
if (value == v) {
410410
orc_mmx_emit_pcmpeqb (compiler, reg, reg);
411-
orc_mmx_emit_psrld (compiler, i, reg);
411+
orc_mmx_emit_psrld_imm (compiler, i, reg);
412412
return;
413413
}
414414
}
@@ -417,13 +417,13 @@ orc_mmx_load_constant (OrcCompiler *compiler, int reg, int size, orc_uint64 valu
417417
v = (0xffff & (0xffff<<i)) | (0xffff0000 & (0xffff0000<<i));
418418
if (value == v) {
419419
orc_mmx_emit_pcmpeqb (compiler, reg, reg);
420-
orc_mmx_emit_psllw (compiler, i, reg);
420+
orc_mmx_emit_psllw_imm (compiler, i, reg);
421421
return;
422422
}
423423
v = (0xffff & (0xffff>>i)) | (0xffff0000 & (0xffff0000>>i));
424424
if (value == v) {
425425
orc_mmx_emit_pcmpeqb (compiler, reg, reg);
426-
orc_mmx_emit_psrlw (compiler, i, reg);
426+
orc_mmx_emit_psrlw_imm (compiler, i, reg);
427427
return;
428428
}
429429
}

0 commit comments

Comments
 (0)