Lower the rest of the vector arithmetic operations.

The instructions emitted by the lowering operations require memory
operands to be aligned to 16 bytes. Since there is no support for
aligning memory operands in Subzero, do the arithmetic in registers for
now.

Add vector arithmetic to the arith crosstest. Pass the -mstackrealign
parameter to the crosstest clang so that llc code called back from
Subzero code (helper calls) doesn't assume that the stack is aligned at
the entry to the call.

BUG=none
R=jvoung@chromium.org, stichnot@chromium.org

Review URL: https://codereview.chromium.org/397833002
diff --git a/crosstest/test_arith.cpp b/crosstest/test_arith.cpp
index 18b4b57..ed6c9d3 100644
--- a/crosstest/test_arith.cpp
+++ b/crosstest/test_arith.cpp
@@ -10,7 +10,10 @@
   uint8_t test##inst(uint8_t a, uint8_t b) { return a op b; }                  \
   uint16_t test##inst(uint16_t a, uint16_t b) { return a op b; }               \
   uint32_t test##inst(uint32_t a, uint32_t b) { return a op b; }               \
-  uint64_t test##inst(uint64_t a, uint64_t b) { return a op b; }
+  uint64_t test##inst(uint64_t a, uint64_t b) { return a op b; }               \
+  v4ui32 test##inst(v4ui32 a, v4ui32 b) { return a op b; }                     \
+  v8ui16 test##inst(v8ui16 a, v8ui16 b) { return a op b; }                     \
+  v16ui8 test##inst(v16ui8 a, v16ui8 b) { return a op b; }
 UINTOP_TABLE
 #undef X
 
@@ -19,12 +22,16 @@
   int8_t test##inst(int8_t a, int8_t b) { return a op b; }                     \
   int16_t test##inst(int16_t a, int16_t b) { return a op b; }                  \
   int32_t test##inst(int32_t a, int32_t b) { return a op b; }                  \
-  int64_t test##inst(int64_t a, int64_t b) { return a op b; }
+  int64_t test##inst(int64_t a, int64_t b) { return a op b; }                  \
+  v4si32 test##inst(v4si32 a, v4si32 b) { return a op b; }                     \
+  v8si16 test##inst(v8si16 a, v8si16 b) { return a op b; }                     \
+  v16si8 test##inst(v16si8 a, v16si8 b) { return a op b; }
 SINTOP_TABLE
 #undef X
 
 #define X(inst, op, func)                                                      \
   float test##inst(float a, float b) { return func(a op b); }                  \
-  double test##inst(double a, double b) { return func(a op b); }
+  double test##inst(double a, double b) { return func(a op b); }               \
+  v4f32 test##inst(v4f32 a, v4f32 b) { return func(a op b); }
 FPOP_TABLE
 #undef X