[aarch64-port-dev ] RFR: Add support for AES Intrinsics
Andrew Haley
aph at redhat.com
Mon Jul 21 10:30:13 UTC 2014
On 07/21/2014 11:00 AM, Edward Nevill wrote:
> OK to push?
The assembler definitions desperately need refactoring.
For example:
+ void v_st1(FloatRegister Vt, FloatRegister Vt2, FloatRegister Vt3, FloatRegister Vt4, SIMD_Arrangement T, Register Xn, int imm) {
+ starti;
+ assert((32 << ((int)T & 1)) == imm, "size/imm mismatch");
+ assert((Vt2->encoding_nocheck()) == ((Vt->encoding_nocheck() + 1) % 32), "Invalid Vt2");
Can't you just define Register.next() and use it?
+ assert((Vt3->encoding_nocheck()) == ((Vt->encoding_nocheck() + 2) % 32), "Invalid Vt3");
+ assert((Vt4->encoding_nocheck()) == ((Vt->encoding_nocheck() + 3) % 32), "Invalid Vt4");
+ f(0, 31), f((int)T & 1, 30), f(0b001100100, 29, 21), f(0b11111, 20, 16), f(0b0010, 15, 12);
+ f((int)T >> 1, 11, 10), rf(Xn, 5), rf(Vt, 0);
+ }
+ void v_st1(FloatRegister Vt, FloatRegister Vt2, FloatRegister Vt3, FloatRegister Vt4, SIMD_Arrangement T, Register Xn, Register Xm) {
+ starti;
+ assert((Vt2->encoding_nocheck()) == ((Vt->encoding_nocheck() + 1) % 32), "Invalid Vt2");
+ assert((Vt3->encoding_nocheck()) == ((Vt->encoding_nocheck() + 2) % 32), "Invalid Vt3");
+ assert((Vt4->encoding_nocheck()) == ((Vt->encoding_nocheck() + 3) % 32), "Invalid Vt4");
+ f(0, 31), f((int)T & 1, 30), f(0b001100100, 29, 21), rf(Xm, 16), f(0b0010, 15, 12);
+ f((int)T >> 1, 11, 10), rf(Xn, 5), rf(Vt, 0);
+ }
These definitions are almost identical.
I'm wondering if the vector instructions should go into a separate
file.
Also, I intend to remove the "v_" prefixes from all of the instructions
once this has been committed: there's no need for them, and it's a
divergence from the standard assembly names that has no obvious
purpose.
Andrew.
More information about the aarch64-port-dev
mailing list