blob: f2658d85f45da033b5cdb750bed323eecf1bec17 [file] [log] [blame]
Jim Stichnoth7da431b2014-08-05 11:22:37 -07001//===- subzero/crosstest/test_arith.cpp - Arithmetic operator tests -------===//
2//
3// The Subzero Code Generator
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Implementation for crosstesting arithmetic operations.
11//
12//===----------------------------------------------------------------------===//
13
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070014// This aims to test all the arithmetic bitcode instructions across
15// all PNaCl primitive data types.
16
17#include <stdint.h>
18
19#include "test_arith.h"
John Porto1d235422015-08-12 12:37:53 -070020#include "xdefs.h"
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070021
Jim Stichnoth7dbe8022016-05-31 12:21:51 -070022#if 0
23// The following is commented out, and instead, a python script auto-generates a
24// .ll file with the equivalent functionality.
25
Matt Walaafeaee42014-08-07 13:47:30 -070026#define X(inst, op, isdiv, isshift) \
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070027 bool test##inst(bool a, bool b) { return a op b; } \
28 uint8_t test##inst(uint8_t a, uint8_t b) { return a op b; } \
29 uint16_t test##inst(uint16_t a, uint16_t b) { return a op b; } \
30 uint32_t test##inst(uint32_t a, uint32_t b) { return a op b; } \
John Porto1d235422015-08-12 12:37:53 -070031 uint64 test##inst(uint64 a, uint64 b) { return a op b; } \
Matt Wala7fa22d82014-07-17 12:41:31 -070032 v4ui32 test##inst(v4ui32 a, v4ui32 b) { return a op b; } \
33 v8ui16 test##inst(v8ui16 a, v8ui16 b) { return a op b; } \
34 v16ui8 test##inst(v16ui8 a, v16ui8 b) { return a op b; }
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070035UINTOP_TABLE
36#undef X
37
Matt Walaafeaee42014-08-07 13:47:30 -070038#define X(inst, op, isdiv, isshift) \
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070039 bool test##inst(bool a, bool b) { return a op b; } \
Jim Stichnoth7da431b2014-08-05 11:22:37 -070040 myint8_t test##inst(myint8_t a, myint8_t b) { return a op b; } \
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070041 int16_t test##inst(int16_t a, int16_t b) { return a op b; } \
42 int32_t test##inst(int32_t a, int32_t b) { return a op b; } \
John Porto1d235422015-08-12 12:37:53 -070043 int64 test##inst(int64 a, int64 b) { return a op b; } \
Matt Wala7fa22d82014-07-17 12:41:31 -070044 v4si32 test##inst(v4si32 a, v4si32 b) { return a op b; } \
45 v8si16 test##inst(v8si16 a, v8si16 b) { return a op b; } \
46 v16si8 test##inst(v16si8 a, v16si8 b) { return a op b; }
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070047SINTOP_TABLE
48#undef X
49
50#define X(inst, op, func) \
51 float test##inst(float a, float b) { return func(a op b); } \
Matt Wala7fa22d82014-07-17 12:41:31 -070052 double test##inst(double a, double b) { return func(a op b); } \
53 v4f32 test##inst(v4f32 a, v4f32 b) { return func(a op b); }
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070054FPOP_TABLE
55#undef X
John Porto98cc08c2015-11-24 12:30:01 -080056
Jim Stichnoth7dbe8022016-05-31 12:21:51 -070057#endif // 0
58
John Porto98cc08c2015-11-24 12:30:01 -080059#define X(mult_by) \
60 bool testMultiplyBy##mult_by(bool a, bool /*unused*/) { \
61 return a * (mult_by); \
62 } \
63 bool testMultiplyByNeg##mult_by(bool a, bool /*unused*/) { \
64 return a * (-(mult_by)); \
65 } \
66 uint8_t testMultiplyBy##mult_by(uint8_t a, uint8_t /*unused*/) { \
67 return a * (mult_by); \
68 } \
69 uint8_t testMultiplyByNeg##mult_by(uint8_t a, uint8_t /*unused*/) { \
70 return a * (-(mult_by)); \
71 } \
72 uint16_t testMultiplyBy##mult_by(uint16_t a, uint16_t /*unused*/) { \
73 return a * (mult_by); \
74 } \
75 uint16_t testMultiplyByNeg##mult_by(uint16_t a, uint16_t /*unused*/) { \
76 return a * (-(mult_by)); \
77 } \
78 uint32_t testMultiplyBy##mult_by(uint32_t a, uint32_t /*unused*/) { \
79 return a * (mult_by); \
80 } \
81 uint32_t testMultiplyByNeg##mult_by(uint32_t a, uint32_t /*unused*/) { \
82 return a * (-(mult_by)); \
83 } \
84 uint64_t testMultiplyBy##mult_by(uint64_t a, uint64_t /*unused*/) { \
85 return a * (mult_by); \
86 } \
87 uint64_t testMultiplyByNeg##mult_by(uint64_t a, uint64_t /*unused*/) { \
88 return a * (-(mult_by)); \
89 }
90MULIMM_TABLE
91#undef X