Commit e039c405 authored by Shenghou Ma's avatar Shenghou Ma

cmd/6a, cmd/6l: add support for AES-NI instrutions and PSHUFD

This CL adds support for the these 7 new instructions to 6a/6l in
preparation of the upcoming CL for AES-NI accelerated crypto/aes:
AESENC, AESENCLAST, AESDEC, AESDECLAST, AESIMC, AESKEYGENASSIST,
and PSHUFD.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5970055
parent b7331f9b
...@@ -1008,6 +1008,13 @@ struct ...@@ -1008,6 +1008,13 @@ struct
"PREFETCHT2", LTYPE2, APREFETCHT2, "PREFETCHT2", LTYPE2, APREFETCHT2,
"PREFETCHNTA", LTYPE2, APREFETCHNTA, "PREFETCHNTA", LTYPE2, APREFETCHNTA,
"UNDEF", LTYPE0, AUNDEF, "UNDEF", LTYPE0, AUNDEF,
"AESENC", LTYPE3, AAESENC,
"AESENCLAST", LTYPE3, AAESENCLAST,
"AESDEC", LTYPE3, AAESDEC,
"AESDECLAST", LTYPE3, AAESDECLAST,
"AESIMC", LTYPE3, AAESIMC,
"AESKEYGENASSIST", LTYPEX, AAESKEYGENASSIST,
"PSHUFD", LTYPEX, APSHUFD,
0 0
}; };
......
...@@ -748,6 +748,15 @@ enum as ...@@ -748,6 +748,15 @@ enum as
AUNDEF, AUNDEF,
AAESENC,
AAESENCLAST,
AAESDEC,
AAESDECLAST,
AAESIMC,
AAESKEYGENASSIST,
APSHUFD,
ALAST ALAST
}; };
......
...@@ -269,7 +269,7 @@ uchar yimul[] = ...@@ -269,7 +269,7 @@ uchar yimul[] =
}; };
uchar yimul3[] = uchar yimul3[] =
{ {
Yml, Yrl, Zibm_r, 1, Yml, Yrl, Zibm_r, 2,
0 0
}; };
uchar ybyte[] = uchar ybyte[] =
...@@ -518,17 +518,17 @@ uchar ymrxr[] = ...@@ -518,17 +518,17 @@ uchar ymrxr[] =
}; };
uchar ymshuf[] = uchar ymshuf[] =
{ {
Ymm, Ymr, Zibm_r, 1, Ymm, Ymr, Zibm_r, 2,
0 0
}; };
uchar yxshuf[] = uchar yxshuf[] =
{ {
Yxm, Yxr, Zibm_r, 1, Yxm, Yxr, Zibm_r, 2,
0 0
}; };
uchar yextrw[] = uchar yextrw[] =
{ {
Yxr, Yrl, Zibm_r, 1, Yxr, Yrl, Zibm_r, 2,
0 0
}; };
uchar ypsdq[] = uchar ypsdq[] =
...@@ -551,6 +551,16 @@ uchar yprefetch[] = ...@@ -551,6 +551,16 @@ uchar yprefetch[] =
Ym, Ynone, Zm_o, 2, Ym, Ynone, Zm_o, 2,
0, 0,
}; };
uchar yaes[] =
{
Yxm, Yxr, Zlitm_r, 2,
0
};
uchar yaes2[] =
{
Yxm, Yxr, Zibm_r, 2,
0
};
/* /*
* You are doasm, holding in your hand a Prog* with p->as set to, say, ACRC32, * You are doasm, holding in your hand a Prog* with p->as set to, say, ACRC32,
...@@ -791,7 +801,7 @@ Optab optab[] = ...@@ -791,7 +801,7 @@ Optab optab[] =
{ AIMULL, yimul, Px, 0xf7,(05),0x6b,0x69,Pm,0xaf }, { AIMULL, yimul, Px, 0xf7,(05),0x6b,0x69,Pm,0xaf },
{ AIMULQ, yimul, Pw, 0xf7,(05),0x6b,0x69,Pm,0xaf }, { AIMULQ, yimul, Pw, 0xf7,(05),0x6b,0x69,Pm,0xaf },
{ AIMULW, yimul, Pe, 0xf7,(05),0x6b,0x69,Pm,0xaf }, { AIMULW, yimul, Pe, 0xf7,(05),0x6b,0x69,Pm,0xaf },
{ AIMUL3Q, yimul3, Pw, 0x6b }, { AIMUL3Q, yimul3, Pw, 0x6b,(00) },
{ AINB, yin, Pb, 0xe4,0xec }, { AINB, yin, Pb, 0xe4,0xec },
{ AINCB, yincb, Pb, 0xfe,(00) }, { AINCB, yincb, Pb, 0xfe,(00) },
{ AINCL, yincl, Px, 0xff,(00) }, { AINCL, yincl, Px, 0xff,(00) },
...@@ -950,7 +960,7 @@ Optab optab[] = ...@@ -950,7 +960,7 @@ Optab optab[] =
{ APCMPGTB, ymm, Py, 0x64,Pe,0x64 }, { APCMPGTB, ymm, Py, 0x64,Pe,0x64 },
{ APCMPGTL, ymm, Py, 0x66,Pe,0x66 }, { APCMPGTL, ymm, Py, 0x66,Pe,0x66 },
{ APCMPGTW, ymm, Py, 0x65,Pe,0x65 }, { APCMPGTW, ymm, Py, 0x65,Pe,0x65 },
{ APEXTRW, yextrw, Pq, 0xc5 }, { APEXTRW, yextrw, Pq, 0xc5,(00) },
{ APF2IL, ymfp, Px, 0x1d }, { APF2IL, ymfp, Px, 0x1d },
{ APF2IW, ymfp, Px, 0x1c }, { APF2IW, ymfp, Px, 0x1c },
{ API2FL, ymfp, Px, 0x0d }, { API2FL, ymfp, Px, 0x0d },
...@@ -971,7 +981,7 @@ Optab optab[] = ...@@ -971,7 +981,7 @@ Optab optab[] =
{ APFRSQRT, ymfp, Px, 0x97 }, { APFRSQRT, ymfp, Px, 0x97 },
{ APFSUB, ymfp, Px, 0x9a }, { APFSUB, ymfp, Px, 0x9a },
{ APFSUBR, ymfp, Px, 0xaa }, { APFSUBR, ymfp, Px, 0xaa },
{ APINSRW, yextrw, Pq, 0xc4 }, { APINSRW, yextrw, Pq, 0xc4,(00) },
{ APMADDWL, ymm, Py, 0xf5,Pe,0xf5 }, { APMADDWL, ymm, Py, 0xf5,Pe,0xf5 },
{ APMAXSW, yxm, Pe, 0xee }, { APMAXSW, yxm, Pe, 0xee },
{ APMAXUB, yxm, Pe, 0xde }, { APMAXUB, yxm, Pe, 0xde },
...@@ -993,10 +1003,10 @@ Optab optab[] = ...@@ -993,10 +1003,10 @@ Optab optab[] =
{ APOPW, ypopl, Pe, 0x58,0x8f,(00) }, { APOPW, ypopl, Pe, 0x58,0x8f,(00) },
{ APOR, ymm, Py, 0xeb,Pe,0xeb }, { APOR, ymm, Py, 0xeb,Pe,0xeb },
{ APSADBW, yxm, Pq, 0xf6 }, { APSADBW, yxm, Pq, 0xf6 },
{ APSHUFHW, yxshuf, Pf3, 0x70 }, { APSHUFHW, yxshuf, Pf3, 0x70,(00) },
{ APSHUFL, yxshuf, Pq, 0x70 }, { APSHUFL, yxshuf, Pq, 0x70,(00) },
{ APSHUFLW, yxshuf, Pf2, 0x70 }, { APSHUFLW, yxshuf, Pf2, 0x70,(00) },
{ APSHUFW, ymshuf, Pm, 0x70 }, { APSHUFW, ymshuf, Pm, 0x70,(00) },
{ APSLLO, ypsdq, Pq, 0x73,(07) }, { APSLLO, ypsdq, Pq, 0x73,(07) },
{ APSLLL, yps, Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) }, { APSLLL, yps, Py, 0xf2, 0x72,(06), Pe,0xf2, Pe,0x72,(06) },
{ APSLLQ, yps, Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x73,(06) }, { APSLLQ, yps, Py, 0xf3, 0x73,(06), Pe,0xf3, Pe,0x73,(06) },
...@@ -1101,8 +1111,8 @@ Optab optab[] = ...@@ -1101,8 +1111,8 @@ Optab optab[] =
{ ASHRL, yshl, Px, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) }, { ASHRL, yshl, Px, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
{ ASHRQ, yshl, Pw, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) }, { ASHRQ, yshl, Pw, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
{ ASHRW, yshl, Pe, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) }, { ASHRW, yshl, Pe, 0xd1,(05),0xc1,(05),0xd3,(05),0xd3,(05) },
{ ASHUFPD, yxshuf, Pq, 0xc6 }, { ASHUFPD, yxshuf, Pq, 0xc6,(00) },
{ ASHUFPS, yxshuf, Pm, 0xc6 }, { ASHUFPS, yxshuf, Pm, 0xc6,(00) },
{ ASQRTPD, yxm, Pe, 0x51 }, { ASQRTPD, yxm, Pe, 0x51 },
{ ASQRTPS, yxm, Pm, 0x51 }, { ASQRTPS, yxm, Pm, 0x51 },
{ ASQRTSD, yxm, Pf2, 0x51 }, { ASQRTSD, yxm, Pf2, 0x51 },
...@@ -1296,6 +1306,15 @@ Optab optab[] = ...@@ -1296,6 +1306,15 @@ Optab optab[] =
{ AUNDEF, ynone, Px, 0x0f, 0x0b }, { AUNDEF, ynone, Px, 0x0f, 0x0b },
{ AAESENC, yaes, Pq, 0x38,0xdc,(0) },
{ AAESENCLAST, yaes, Pq, 0x38,0xdd,(0) },
{ AAESDEC, yaes, Pq, 0x38,0xde,(0) },
{ AAESDECLAST, yaes, Pq, 0x38,0xdf,(0) },
{ AAESIMC, yaes, Pq, 0x38,0xdb,(0) },
{ AAESKEYGENASSIST, yaes2, Pq, 0x3a,0xdf,(0) },
{ APSHUFD, yaes2, Pq, 0x70,(0) },
{ AEND }, { AEND },
0 0
}; };
......
...@@ -1247,6 +1247,7 @@ found: ...@@ -1247,6 +1247,7 @@ found:
break; break;
case Zibm_r: case Zibm_r:
while ((op = o->op[z++]) != 0)
*andptr++ = op; *andptr++ = op;
asmand(&p->from, &p->to); asmand(&p->from, &p->to);
*andptr++ = p->to.offset; *andptr++ = p->to.offset;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment