Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(447)

Unified Diff: src/ia32/assembler-ia32.h

Issue 2931333002: [ia32] Add pextrb/pextrw, pinsrb, pshufb/pshuflw and AVX version (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/ia32/assembler-ia32.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/ia32/assembler-ia32.h
diff --git a/src/ia32/assembler-ia32.h b/src/ia32/assembler-ia32.h
index 77673697e4dde31440f459cf490e408e8776f91b..466245dd558d4eb1b75f74b855c38073a3379da6 100644
--- a/src/ia32/assembler-ia32.h
+++ b/src/ia32/assembler-ia32.h
@@ -1128,14 +1128,36 @@ class Assembler : public AssemblerBase {
void psrlq(XMMRegister reg, int8_t shift);
void psrlq(XMMRegister dst, XMMRegister src);
+ // pshufb is SSSE3 instruction
+ void pshufb(XMMRegister dst, XMMRegister src) { pshufb(dst, Operand(src)); }
+ void pshufb(XMMRegister dst, const Operand& src);
+ void pshuflw(XMMRegister dst, XMMRegister src, uint8_t shuffle) {
+ pshuflw(dst, Operand(src), shuffle);
+ }
+ void pshuflw(XMMRegister dst, const Operand& src, uint8_t shuffle);
void pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) {
pshufd(dst, Operand(src), shuffle);
}
void pshufd(XMMRegister dst, const Operand& src, uint8_t shuffle);
+
+ void pextrb(Register dst, XMMRegister src, int8_t offset) {
+ pextrb(Operand(dst), src, offset);
+ }
+ void pextrb(const Operand& dst, XMMRegister src, int8_t offset);
+ // Use SSE4_1 encoding for pextrw reg, xmm, imm8 for consistency
+ void pextrw(Register dst, XMMRegister src, int8_t offset) {
+ pextrw(Operand(dst), src, offset);
+ }
+ void pextrw(const Operand& dst, XMMRegister src, int8_t offset);
void pextrd(Register dst, XMMRegister src, int8_t offset) {
pextrd(Operand(dst), src, offset);
}
void pextrd(const Operand& dst, XMMRegister src, int8_t offset);
+
+ void pinsrb(XMMRegister dst, Register src, int8_t offset) {
+ pinsrb(dst, Operand(src), offset);
+ }
+ void pinsrb(XMMRegister dst, const Operand& src, int8_t offset);
void pinsrw(XMMRegister dst, Register src, int8_t offset) {
pinsrw(dst, Operand(src), offset);
}
@@ -1388,14 +1410,46 @@ class Assembler : public AssemblerBase {
void vpsraw(XMMRegister dst, XMMRegister src, int8_t imm8);
void vpsrad(XMMRegister dst, XMMRegister src, int8_t imm8);
+ void vpshufb(XMMRegister dst, XMMRegister src1, XMMRegister src2) {
+ vpshufb(dst, src1, Operand(src2));
+ }
+ void vpshufb(XMMRegister dst, XMMRegister src1, const Operand& src2) {
+ vinstr(0x00, dst, src1, src2, k66, k0F38, kW0);
+ }
+ void vpshuflw(XMMRegister dst, XMMRegister src, uint8_t shuffle) {
+ vpshuflw(dst, Operand(src), shuffle);
+ }
+ void vpshuflw(XMMRegister dst, const Operand& src, uint8_t shuffle);
void vpshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle) {
vpshufd(dst, Operand(src), shuffle);
}
void vpshufd(XMMRegister dst, const Operand& src, uint8_t shuffle);
+
+ void vpextrb(Register dst, XMMRegister src, int8_t offset) {
+ vpextrb(Operand(dst), src, offset);
+ }
+ void vpextrb(const Operand& dst, XMMRegister src, int8_t offset);
+ void vpextrw(Register dst, XMMRegister src, int8_t offset) {
+ vpextrw(Operand(dst), src, offset);
+ }
+ void vpextrw(const Operand& dst, XMMRegister src, int8_t offset);
void vpextrd(Register dst, XMMRegister src, int8_t offset) {
vpextrd(Operand(dst), src, offset);
}
void vpextrd(const Operand& dst, XMMRegister src, int8_t offset);
+
+ void vpinsrb(XMMRegister dst, XMMRegister src1, Register src2,
+ int8_t offset) {
+ vpinsrb(dst, src1, Operand(src2), offset);
+ }
+ void vpinsrb(XMMRegister dst, XMMRegister src1, const Operand& src2,
+ int8_t offset);
+ void vpinsrw(XMMRegister dst, XMMRegister src1, Register src2,
+ int8_t offset) {
+ vpinsrw(dst, src1, Operand(src2), offset);
+ }
+ void vpinsrw(XMMRegister dst, XMMRegister src1, const Operand& src2,
+ int8_t offset);
void vpinsrd(XMMRegister dst, XMMRegister src1, Register src2,
int8_t offset) {
vpinsrd(dst, src1, Operand(src2), offset);
« no previous file with comments | « no previous file | src/ia32/assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698