blob: 446ea04f234b4cac783ba6c1089d16aa05a8378e [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"
20
Matt Walaafeaee42014-08-07 13:47:30 -070021#define X(inst, op, isdiv, isshift) \
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070022 bool test##inst(bool a, bool b) { return a op b; } \
23 uint8_t test##inst(uint8_t a, uint8_t b) { return a op b; } \
24 uint16_t test##inst(uint16_t a, uint16_t b) { return a op b; } \
25 uint32_t test##inst(uint32_t a, uint32_t b) { return a op b; } \
Matt Wala7fa22d82014-07-17 12:41:31 -070026 uint64_t test##inst(uint64_t a, uint64_t b) { return a op b; } \
27 v4ui32 test##inst(v4ui32 a, v4ui32 b) { return a op b; } \
28 v8ui16 test##inst(v8ui16 a, v8ui16 b) { return a op b; } \
29 v16ui8 test##inst(v16ui8 a, v16ui8 b) { return a op b; }
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070030UINTOP_TABLE
31#undef X
32
Matt Walaafeaee42014-08-07 13:47:30 -070033#define X(inst, op, isdiv, isshift) \
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070034 bool test##inst(bool a, bool b) { return a op b; } \
Jim Stichnoth7da431b2014-08-05 11:22:37 -070035 myint8_t test##inst(myint8_t a, myint8_t b) { return a op b; } \
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070036 int16_t test##inst(int16_t a, int16_t b) { return a op b; } \
37 int32_t test##inst(int32_t a, int32_t b) { return a op b; } \
Matt Wala7fa22d82014-07-17 12:41:31 -070038 int64_t test##inst(int64_t a, int64_t b) { return a op b; } \
39 v4si32 test##inst(v4si32 a, v4si32 b) { return a op b; } \
40 v8si16 test##inst(v8si16 a, v8si16 b) { return a op b; } \
41 v16si8 test##inst(v16si8 a, v16si8 b) { return a op b; }
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070042SINTOP_TABLE
43#undef X
44
45#define X(inst, op, func) \
46 float test##inst(float a, float b) { return func(a op b); } \
Matt Wala7fa22d82014-07-17 12:41:31 -070047 double test##inst(double a, double b) { return func(a op b); } \
48 v4f32 test##inst(v4f32 a, v4f32 b) { return func(a op b); }
Jim Stichnoth5bc2b1d2014-05-22 13:38:48 -070049FPOP_TABLE
50#undef X