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

Side by Side Diff: crosstest/test_calling_conv_main.cpp

Issue 444443002: Subzero: Align the stack at the point of function calls. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Improve wording of a comment and reorder function in crosstest Created 6 years, 4 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 unified diff | Download patch
OLDNEW
(Empty)
1 //===- subzero/crosstest/test_calling_conv_main.cpp - Driver for 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 // Driver for cross testing the compatibility of calling conventions
Jim Stichnoth 2014/08/05 18:09:26 Period at end of sentence?
wala 2014/08/05 23:57:03 Done.
11 //
12 //===----------------------------------------------------------------------===//
13
14 /* crosstest.py --test=test_calling_conv.c \
15 --driver=test_calling_conv_main.cpp --prefix=Subzero_ \
16 --output=test_calling_conv */
17
18 #include <iostream>
Jim Stichnoth 2014/08/05 18:09:26 Alphabetize the includes.
wala 2014/08/05 23:57:03 Done.
19 #include <sstream>
20 #include <cstring>
21
22 #include "test_calling_conv.h"
23
Jim Stichnoth 2014/08/05 18:09:26 There should be a comment here describing the big
wala 2014/08/05 23:57:03 Done.
24 extern "C" {
25 size_t ArgNum, Subzero_ArgNum;
26 size_t DynAllocaSize, Subzero_DynAllocaSize;
27 CalleePtrTy Callee, Subzero_Callee;
28 char *Buf, *Subzero_Buf;
29
30 void fakeUse(void *) {}
31 void Subzero_fakeUse(void *) {}
32 }
33
34 const static size_t ALLOCA_SIZE = 7;
35 const static size_t BUF_SIZE = 16;
36
37 std::string bufAsString(const char Buf[BUF_SIZE]) {
38 std::ostringstream OS;
39 for (size_t i = 0; i < BUF_SIZE; ++i) {
40 if (i > 0)
41 OS << " ";
42 OS << (unsigned) Buf[i];
43 }
44 return OS.str();
45 }
46
47 void testCaller(size_t &TotalTests, size_t &Passes, size_t &Failures) {
48 static struct {
49 const char *CallerName, *CalleeName;
50 size_t Args;
51 void (*Caller)(void);
52 void (*Subzero_Caller)(void);
53 CalleePtrTy Callee;
54 } Funcs[] = {
55 #define X(caller, callee, argc) \
56 { \
57 STR(caller), STR(callee), argc, &caller, &Subzero_##caller, \
58 reinterpret_cast<CalleePtrTy>(&callee), \
59 } \
60 ,
61 CALLER_TEST_FUNC_TABLE
62 #undef X
63 };
64
65 const static size_t NumFuncs = sizeof(Funcs) / sizeof(*Funcs);
66
67 for (size_t f = 0; f < NumFuncs; ++f) {
68 char BufLlc[BUF_SIZE], BufSz[BUF_SIZE];
69 Callee = Subzero_Callee = Funcs[f].Callee;
70 DynAllocaSize = Subzero_DynAllocaSize = ALLOCA_SIZE;
71
72 for (size_t i = 0; i < Funcs[f].Args; ++i) {
73 memset(BufLlc, 0xff, sizeof(BufLlc));
74 memset(BufSz, 0xff, sizeof(BufSz));
75
76 ArgNum = Subzero_ArgNum = i;
77
78 Buf = BufLlc;
79 Funcs[f].Caller();
80
81 Buf = BufSz;
82 Funcs[f].Subzero_Caller();
83
84 ++TotalTests;
85 if (!memcmp(BufLlc, BufSz, sizeof(BufLlc))) {
86 ++Passes;
87 } else {
88 ++Failures;
89 std::cout << "testCaller(Caller=" << Funcs[f].CallerName << ", ";
90 std::cout << "Callee=" << Funcs[f].CalleeName << ", ";
91 std::cout << "ArgNum=" << ArgNum << ")\n";
92 std::cout << "sz =" << bufAsString(BufSz) << "\n";
93 std::cout << "llc=" << bufAsString(BufLlc) << "\n";
94 }
95 }
96 }
97 }
98
99 void testCallee(size_t &TotalTests, size_t &Passes, size_t &Failures) {
100 static struct {
101 const char *CallerName, *CalleeName;
102 size_t Args;
103 void (*Caller)(void);
104 CalleePtrTy Callee, Subzero_Callee;
105 } Funcs[] = {
106 #define X(caller, callee, argc) \
107 { \
108 STR(caller), STR(callee), argc, &caller, \
109 reinterpret_cast<CalleePtrTy>(&callee), \
110 reinterpret_cast<CalleePtrTy>(&Subzero_##callee) \
111 } \
112 ,
113 CALLEE_TEST_FUNC_TABLE
114 #undef X
115 };
116
117 const static size_t NumFuncs = sizeof(Funcs) / sizeof(*Funcs);
118
119 for (size_t f = 0; f < NumFuncs; ++f) {
120 char BufLlc[BUF_SIZE], BufSz[BUF_SIZE];
121 Buf = BufLlc;
122 Subzero_Buf = BufSz;
123 DynAllocaSize = Subzero_DynAllocaSize = ALLOCA_SIZE;
124
125 for (size_t i = 0; i < Funcs[f].Args; ++i) {
126 memset(BufLlc, 0xff, sizeof(BufLlc));
127 memset(BufSz, 0xff, sizeof(BufSz));
128
129 ArgNum = Subzero_ArgNum = i;
130
131 Callee = Funcs[f].Callee;
132 Funcs[f].Caller();
133
134 Callee = Funcs[f].Subzero_Callee;
135 Funcs[f].Caller();
136
137 ++TotalTests;
138 if (!memcmp(BufLlc, BufSz, sizeof(BufLlc))) {
139 ++Passes;
140 } else {
141 ++Failures;
142 std::cout << "testCallee(Caller=" << Funcs[f].CallerName << ", ";
143 std::cout << "Callee=" << Funcs[f].CalleeName << ", ";
144 std::cout << "ArgNum=" << ArgNum << ")\n";
145 std::cout << "sz =" << bufAsString(BufSz) << "\n";
146 std::cout << "llc=" << bufAsString(BufLlc) << "\n";
147 }
148 }
149 }
150 }
151
152 int main(int argc, char *argv[]) {
153 size_t TotalTests = 0;
154 size_t Passes = 0;
155 size_t Failures = 0;
156
157 testCaller(TotalTests, Passes, Failures);
158 testCallee(TotalTests, Passes, Failures);
159
160 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes
161 << " Failures=" << Failures << "\n";
162
163 return Failures;
164 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698