Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 654a8d5

Browse files
committed
Merge SSE intrinsics into the table-driven framework
1 parent fffd345 commit 654a8d5

10 files changed

+267
-480
lines changed

src/jit/compiler.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3122,7 +3122,7 @@ class Compiler
31223122
static int numArgsOfHWIntrinsic(NamedIntrinsic intrinsic);
31233123
static instruction insOfHWIntrinsic(NamedIntrinsic intrinsic, var_types type);
31243124
static HWIntrinsicCategory categoryOfHWIntrinsic(NamedIntrinsic intrinsic);
3125-
static HWIntrinsicFlag flagOfHWIntrinsic(NamedIntrinsic intrinsic);
3125+
static HWIntrinsicFlag flagsOfHWIntrinsic(NamedIntrinsic intrinsic);
31263126
GenTree* getArgForHWIntrinsic(var_types argType, CORINFO_CLASS_HANDLE argClass);
31273127
GenTreeArgList* buildArgList(CORINFO_SIG_INFO* sig);
31283128
#endif // _TARGET_XARCH_

src/jit/emitxarch.cpp

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4228,6 +4228,7 @@ void emitter::emitIns_R_R_S_I(
42284228
emitCurIGsize += sz;
42294229
}
42304230

4231+
#ifdef DEBUG
42314232
static bool isAvxBlendv(instruction ins)
42324233
{
42334234
return ins == INS_vblendvps || ins == INS_vblendvpd || ins == INS_vpblendvb;
@@ -4237,6 +4238,7 @@ static bool isSse41Blendv(instruction ins)
42374238
{
42384239
return ins == INS_blendvps || ins == INS_blendvpd || ins == INS_pblendvb;
42394240
}
4241+
#endif
42404242

42414243
void emitter::emitIns_R_R_R_R(
42424244
instruction ins, emitAttr attr, regNumber targetReg, regNumber reg1, regNumber reg2, regNumber reg3)
@@ -5216,23 +5218,23 @@ void emitter::emitIns_SIMD_R_R_A(instruction ins, emitAttr attr, regNumber reg,
52165218
{
52175219
emitIns_R_R(INS_movaps, attr, reg, reg1);
52185220
}
5219-
emitIns_R_A(ins, emitTypeSize(simdtype), reg, indir, IF_RRW_ARD);
5221+
emitIns_R_A(ins, attr, reg, indir, IF_RRW_ARD);
52205222
}
52215223
}
52225224

5223-
void emitter::emitIns_SIMD_R_R_AR(instruction ins, regNumber reg, regNumber reg1, regNumber base, var_types simdtype)
5225+
void emitter::emitIns_SIMD_R_R_AR(instruction ins, emitAttr attr, regNumber reg, regNumber reg1, regNumber base)
52245226
{
52255227
if (UseVEXEncoding())
52265228
{
5227-
emitIns_R_R_AR(ins, emitTypeSize(simdtype), reg, reg1, base, 0);
5229+
emitIns_R_R_AR(ins, attr, reg, reg1, base, 0);
52285230
}
52295231
else
52305232
{
52315233
if (reg1 != reg)
52325234
{
5233-
emitIns_R_R(INS_movaps, emitTypeSize(simdtype), reg, reg1);
5235+
emitIns_R_R(INS_movaps, attr, reg, reg1);
52345236
}
5235-
emitIns_R_AR(ins, emitTypeSize(simdtype), reg, base, 0);
5237+
emitIns_R_AR(ins, attr, reg, base, 0);
52365238
}
52375239
}
52385240

@@ -5325,70 +5327,70 @@ void emitter::emitIns_SIMD_R_R_S(instruction ins, emitAttr attr, regNumber reg,
53255327
}
53265328

53275329
void emitter::emitIns_SIMD_R_R_A_I(
5328-
instruction ins, regNumber reg, regNumber reg1, GenTreeIndir* indir, int ival, var_types simdtype)
5330+
instruction ins, emitAttr attr, regNumber reg, regNumber reg1, GenTreeIndir* indir, int ival)
53295331
{
53305332
if (UseVEXEncoding())
53315333
{
5332-
emitIns_R_R_A_I(ins, emitTypeSize(simdtype), reg, reg1, indir, ival, IF_RWR_RRD_ARD_CNS);
5334+
emitIns_R_R_A_I(ins, attr, reg, reg1, indir, ival, IF_RWR_RRD_ARD_CNS);
53335335
}
53345336
else
53355337
{
53365338
if (reg1 != reg)
53375339
{
5338-
emitIns_R_R(INS_movaps, emitTypeSize(simdtype), reg, reg1);
5340+
emitIns_R_R(INS_movaps, attr, reg, reg1);
53395341
}
5340-
emitIns_R_A_I(ins, emitTypeSize(simdtype), reg, indir, ival);
5342+
emitIns_R_A_I(ins, attr, reg, indir, ival);
53415343
}
53425344
}
53435345

53445346
void emitter::emitIns_SIMD_R_R_C_I(
5345-
instruction ins, regNumber reg, regNumber reg1, CORINFO_FIELD_HANDLE fldHnd, int offs, int ival, var_types simdtype)
5347+
instruction ins, emitAttr attr, regNumber reg, regNumber reg1, CORINFO_FIELD_HANDLE fldHnd, int offs, int ival)
53465348
{
53475349
if (UseVEXEncoding())
53485350
{
5349-
emitIns_R_R_C_I(ins, emitTypeSize(simdtype), reg, reg1, fldHnd, offs, ival);
5351+
emitIns_R_R_C_I(ins, attr, reg, reg1, fldHnd, offs, ival);
53505352
}
53515353
else
53525354
{
53535355
if (reg1 != reg)
53545356
{
5355-
emitIns_R_R(INS_movaps, emitTypeSize(simdtype), reg, reg1);
5357+
emitIns_R_R(INS_movaps, attr, reg, reg1);
53565358
}
5357-
emitIns_R_C_I(ins, emitTypeSize(simdtype), reg, fldHnd, offs, ival);
5359+
emitIns_R_C_I(ins, attr, reg, fldHnd, offs, ival);
53585360
}
53595361
}
53605362

53615363
void emitter::emitIns_SIMD_R_R_R_I(
5362-
instruction ins, regNumber reg, regNumber reg1, regNumber reg2, int ival, var_types simdtype)
5364+
instruction ins, emitAttr attr, regNumber reg, regNumber reg1, regNumber reg2, int ival)
53635365
{
53645366
if (UseVEXEncoding())
53655367
{
5366-
emitIns_R_R_R_I(ins, emitTypeSize(simdtype), reg, reg1, reg2, ival);
5368+
emitIns_R_R_R_I(ins, attr, reg, reg1, reg2, ival);
53675369
}
53685370
else
53695371
{
53705372
if (reg1 != reg)
53715373
{
5372-
emitIns_R_R(INS_movaps, emitTypeSize(simdtype), reg, reg1);
5374+
emitIns_R_R(INS_movaps, attr, reg, reg1);
53735375
}
5374-
emitIns_R_R_I(ins, emitTypeSize(simdtype), reg, reg2, ival);
5376+
emitIns_R_R_I(ins, attr, reg, reg2, ival);
53755377
}
53765378
}
53775379

53785380
void emitter::emitIns_SIMD_R_R_S_I(
5379-
instruction ins, regNumber reg, regNumber reg1, int varx, int offs, int ival, var_types simdtype)
5381+
instruction ins, emitAttr attr, regNumber reg, regNumber reg1, int varx, int offs, int ival)
53805382
{
53815383
if (UseVEXEncoding())
53825384
{
5383-
emitIns_R_R_S_I(ins, emitTypeSize(simdtype), reg, reg1, varx, offs, ival);
5385+
emitIns_R_R_S_I(ins, attr, reg, reg1, varx, offs, ival);
53845386
}
53855387
else
53865388
{
53875389
if (reg1 != reg)
53885390
{
5389-
emitIns_R_R(INS_movaps, emitTypeSize(simdtype), reg, reg1);
5391+
emitIns_R_R(INS_movaps, attr, reg, reg1);
53905392
}
5391-
emitIns_R_S_I(ins, emitTypeSize(simdtype), reg, varx, offs, ival);
5393+
emitIns_R_S_I(ins, attr, reg, varx, offs, ival);
53925394
}
53935395
}
53945396
#endif

src/jit/emitxarch.h

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -455,19 +455,12 @@ void emitIns_R_AX(instruction ins, emitAttr attr, regNumber ireg, regNumber reg,
455455
void emitIns_AX_R(instruction ins, emitAttr attr, regNumber ireg, regNumber reg, unsigned mul, int disp);
456456

457457
#if FEATURE_HW_INTRINSICS
458-
void emitIns_SIMD_R_R_AR(instruction ins, regNumber reg, regNumber reg1, regNumber base, var_types simdtype);
459-
void emitIns_SIMD_R_R_A_I(
460-
instruction ins, regNumber reg, regNumber reg1, GenTreeIndir* indir, int ival, var_types simdtype);
461-
void emitIns_SIMD_R_R_C_I(instruction ins,
462-
regNumber reg,
463-
regNumber reg1,
464-
CORINFO_FIELD_HANDLE fldHnd,
465-
int offs,
466-
int ival,
467-
var_types simdtype);
468-
void emitIns_SIMD_R_R_R_I(instruction ins, regNumber reg, regNumber reg1, regNumber reg2, int ival, var_types simdtype);
469-
void emitIns_SIMD_R_R_S_I(
470-
instruction ins, regNumber reg, regNumber reg1, int varx, int offs, int ival, var_types simdtype);
458+
void emitIns_SIMD_R_R_AR(instruction ins, emitAttr attr, regNumber reg, regNumber reg1, regNumber base);
459+
void emitIns_SIMD_R_R_A_I(instruction ins, emitAttr attr, regNumber reg, regNumber reg1, GenTreeIndir* indir, int ival);
460+
void emitIns_SIMD_R_R_C_I(
461+
instruction ins, emitAttr attr, regNumber reg, regNumber reg1, CORINFO_FIELD_HANDLE fldHnd, int offs, int ival);
462+
void emitIns_SIMD_R_R_R_I(instruction ins, emitAttr attr, regNumber reg, regNumber reg1, regNumber reg2, int ival);
463+
void emitIns_SIMD_R_R_S_I(instruction ins, emitAttr attr, regNumber reg, regNumber reg1, int varx, int offs, int ival);
471464
void emitIns_SIMD_R_R_A(instruction ins, emitAttr attr, regNumber reg, regNumber reg1, GenTreeIndir* indir);
472465
void emitIns_SIMD_R_R_C(
473466
instruction ins, emitAttr attr, regNumber reg, regNumber reg1, CORINFO_FIELD_HANDLE fldHnd, int offs);

0 commit comments

Comments
 (0)