authorgravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2020-08-26 01:48:51+02:00
committergravatar for 124872+jedisct1@users.noreply.github.comFrank Denis <124872+jedisct1@users.noreply.github.com> 2020-08-26 10:50:34+02:00
logad18078d53b448fc18a100dcebca88fe05a1e3ac
tree2977e9fa1fcbbc58057684adf86ceb0291e16ef2
parent0bd53dd2033c60d3446abfb83209237c6eb6c9e2

forceEval() -> doNotOptimizeAway()


15 files changed, 41 insertions(+), 41 deletions(-)

lib/std/crypto/benchmark.zig+5-5
......@@ -47,7 +47,7 @@ pub fn benchmarkHash(comptime Hash: anytype, comptime bytes: comptime_int) !u64
4747 while (offset < bytes) : (offset += block.len) {
4848 h.update(block[0..]);
4949 }
50 mem.forceEval(&h);
50 mem.doNotOptimizeAway(&h);
5151 const end = timer.read();
5252
5353 const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s;
......@@ -82,7 +82,7 @@ pub fn benchmarkMac(comptime Mac: anytype, comptime bytes: comptime_int) !u64 {
8282 const start = timer.lap();
8383 while (offset < bytes) : (offset += in.len) {
8484 Mac.create(mac[0..], in[0..], key[0..]);
85 mem.forceEval(&mac);
85 mem.doNotOptimizeAway(&mac);
8686 }
8787 const end = timer.read();
8888
......@@ -109,7 +109,7 @@ pub fn benchmarkKeyExchange(comptime DhKeyExchange: anytype, comptime exchange_c
109109 var i: usize = 0;
110110 while (i < exchange_count) : (i += 1) {
111111 _ = DhKeyExchange.create(out[0..], out[0..], in[0..]);
112 mem.forceEval(&out);
112 mem.doNotOptimizeAway(&out);
113113 }
114114 }
115115 const end = timer.read();
......@@ -134,7 +134,7 @@ pub fn benchmarkSignature(comptime Signature: anytype, comptime signatures_count
134134 var i: usize = 0;
135135 while (i < signatures_count) : (i += 1) {
136136 const s = try Signature.sign(&msg, key_pair, null);
137 mem.forceEval(&s);
137 mem.doNotOptimizeAway(&s);
138138 }
139139 }
140140 const end = timer.read();
......@@ -170,7 +170,7 @@ pub fn benchmarkAead(comptime Aead: anytype, comptime bytes: comptime_int) !u64
170170 Aead.encrypt(in[0..], tag[0..], in[0..], &[_]u8{}, nonce, key);
171171 Aead.decrypt(in[0..], in[0..], tag, &[_]u8{}, nonce, key) catch unreachable;
172172 }
173 mem.forceEval(&in);
173 mem.doNotOptimizeAway(&in);
174174 const end = timer.read();
175175
176176 const elapsed_s = @intToFloat(f64, end - start) / time.ns_per_s;
lib/std/math.zig+2-2
......@@ -109,8 +109,8 @@ pub fn approxEq(comptime T: type, x: T, y: T, epsilon: T) bool {
109109 return fabs(x - y) < epsilon;
110110}
111111
112pub fn forceEval(value: anytype) void {
113 mem.forceEval(value);
112pub fn doNotOptimizeAway(value: anytype) void {
113 mem.doNotOptimizeAway(value);
114114}
115115
116116pub fn raiseInvalid() void {
lib/std/math/asinh.zig+2-2
......@@ -56,7 +56,7 @@ fn asinh32(x: f32) f32 {
5656 }
5757 // |x| < 0x1p-12, inexact if x != 0
5858 else {
59 math.forceEval(x + 0x1.0p120);
59 math.doNotOptimizeAway(x + 0x1.0p120);
6060 }
6161
6262 return if (s != 0) -rx else rx;
......@@ -87,7 +87,7 @@ fn asinh64(x: f64) f64 {
8787 }
8888 // |x| < 0x1p-12, inexact if x != 0
8989 else {
90 math.forceEval(x + 0x1.0p120);
90 math.doNotOptimizeAway(x + 0x1.0p120);
9191 }
9292
9393 return if (s != 0) -rx else rx;
lib/std/math/atan.zig+2-2
......@@ -72,7 +72,7 @@ fn atan32(x_: f32) f32 {
7272 // |x| < 2^(-12)
7373 if (ix < 0x39800000) {
7474 if (ix < 0x00800000) {
75 math.forceEval(x * x);
75 math.doNotOptimizeAway(x * x);
7676 }
7777 return x;
7878 }
......@@ -170,7 +170,7 @@ fn atan64(x_: f64) f64 {
170170 // |x| < 2^(-27)
171171 if (ix < 0x3E400000) {
172172 if (ix < 0x00100000) {
173 math.forceEval(@floatCast(f32, x));
173 math.doNotOptimizeAway(@floatCast(f32, x));
174174 }
175175 return x;
176176 }
lib/std/math/atanh.zig+2-2
......@@ -45,7 +45,7 @@ fn atanh_32(x: f32) f32 {
4545 if (u < 0x3F800000 - (32 << 23)) {
4646 // underflow
4747 if (u < (1 << 23)) {
48 math.forceEval(y * y);
48 math.doNotOptimizeAway(y * y);
4949 }
5050 }
5151 // |x| < 0.5
......@@ -74,7 +74,7 @@ fn atanh_64(x: f64) f64 {
7474 if (e < 0x3FF - 32) {
7575 // underflow
7676 if (e == 0) {
77 math.forceEval(@floatCast(f32, y));
77 math.doNotOptimizeAway(@floatCast(f32, y));
7878 }
7979 }
8080 // |x| < 0.5
lib/std/math/ceil.zig+4-4
......@@ -47,14 +47,14 @@ fn ceil32(x: f32) f32 {
4747 if (u & m == 0) {
4848 return x;
4949 }
50 math.forceEval(x + 0x1.0p120);
50 math.doNotOptimizeAway(x + 0x1.0p120);
5151 if (u >> 31 == 0) {
5252 u += m;
5353 }
5454 u &= ~m;
5555 return @bitCast(f32, u);
5656 } else {
57 math.forceEval(x + 0x1.0p120);
57 math.doNotOptimizeAway(x + 0x1.0p120);
5858 if (u >> 31 != 0) {
5959 return -0.0;
6060 } else {
......@@ -79,7 +79,7 @@ fn ceil64(x: f64) f64 {
7979 }
8080
8181 if (e <= 0x3FF - 1) {
82 math.forceEval(y);
82 math.doNotOptimizeAway(y);
8383 if (u >> 63 != 0) {
8484 return -0.0;
8585 } else {
......@@ -106,7 +106,7 @@ fn ceil128(x: f128) f128 {
106106 }
107107
108108 if (e <= 0x3FFF - 1) {
109 math.forceEval(y);
109 math.doNotOptimizeAway(y);
110110 if (u >> 127 != 0) {
111111 return -0.0;
112112 } else {
lib/std/math/exp.zig+4-4
......@@ -56,7 +56,7 @@ fn exp32(x_: f32) f32 {
5656 return x * 0x1.0p127;
5757 }
5858 if (sign != 0) {
59 math.forceEval(-0x1.0p-149 / x); // overflow
59 math.doNotOptimizeAway(-0x1.0p-149 / x); // overflow
6060 // x <= -103.972084
6161 if (hx >= 0x42CFF1B5) {
6262 return 0;
......@@ -88,7 +88,7 @@ fn exp32(x_: f32) f32 {
8888 hi = x;
8989 lo = 0;
9090 } else {
91 math.forceEval(0x1.0p127 + x); // inexact
91 math.doNotOptimizeAway(0x1.0p127 + x); // inexact
9292 return 1 + x;
9393 }
9494
......@@ -139,7 +139,7 @@ fn exp64(x_: f64) f64 {
139139 }
140140 if (x < -708.39641853226410622) {
141141 // underflow if x != -inf
142 // math.forceEval(@as(f32, -0x1.0p-149 / x));
142 // math.doNotOptimizeAway(@as(f32, -0x1.0p-149 / x));
143143 if (x < -745.13321910194110842) {
144144 return 0;
145145 }
......@@ -172,7 +172,7 @@ fn exp64(x_: f64) f64 {
172172 lo = 0;
173173 } else {
174174 // inexact if x != 0
175 // math.forceEval(0x1.0p1023 + x);
175 // math.doNotOptimizeAway(0x1.0p1023 + x);
176176 return 1 + x;
177177 }
178178
lib/std/math/exp2.zig+2-2
......@@ -70,7 +70,7 @@ fn exp2_32(x: f32) f32 {
7070 // x < -126
7171 if (u >= 0x80000000) {
7272 if (u >= 0xC3160000 or u & 0x000FFFF != 0) {
73 math.forceEval(-0x1.0p-149 / x);
73 math.doNotOptimizeAway(-0x1.0p-149 / x);
7474 }
7575 // x <= -150
7676 if (u >= 0x3160000) {
......@@ -393,7 +393,7 @@ fn exp2_64(x: f64) f64 {
393393 if (ux >> 63 != 0) {
394394 // underflow
395395 if (x <= -1075 or x - 0x1.0p52 + 0x1.0p52 != x) {
396 math.forceEval(@floatCast(f32, -0x1.0p-149 / x));
396 math.doNotOptimizeAway(@floatCast(f32, -0x1.0p-149 / x));
397397 }
398398 if (x <= -1075) {
399399 return 0;
lib/std/math/expm1.zig+2-2
......@@ -106,7 +106,7 @@ fn expm1_32(x_: f32) f32 {
106106 // |x| < 2^(-25)
107107 else if (hx < 0x33000000) {
108108 if (hx < 0x00800000) {
109 math.forceEval(x * x);
109 math.doNotOptimizeAway(x * x);
110110 }
111111 return x;
112112 } else {
......@@ -237,7 +237,7 @@ fn expm1_64(x_: f64) f64 {
237237 // |x| < 2^(-54)
238238 else if (hx < 0x3C900000) {
239239 if (hx < 0x00100000) {
240 math.forceEval(@floatCast(f32, x));
240 math.doNotOptimizeAway(@floatCast(f32, x));
241241 }
242242 return x;
243243 } else {
lib/std/math/floor.zig+6-6
......@@ -50,13 +50,13 @@ fn floor16(x: f16) f16 {
5050 if (u & m == 0) {
5151 return x;
5252 }
53 math.forceEval(x + 0x1.0p120);
53 math.doNotOptimizeAway(x + 0x1.0p120);
5454 if (u >> 15 != 0) {
5555 u += m;
5656 }
5757 return @bitCast(f16, u & ~m);
5858 } else {
59 math.forceEval(x + 0x1.0p120);
59 math.doNotOptimizeAway(x + 0x1.0p120);
6060 if (u >> 15 == 0) {
6161 return 0.0;
6262 } else {
......@@ -84,13 +84,13 @@ fn floor32(x: f32) f32 {
8484 if (u & m == 0) {
8585 return x;
8686 }
87 math.forceEval(x + 0x1.0p120);
87 math.doNotOptimizeAway(x + 0x1.0p120);
8888 if (u >> 31 != 0) {
8989 u += m;
9090 }
9191 return @bitCast(f32, u & ~m);
9292 } else {
93 math.forceEval(x + 0x1.0p120);
93 math.doNotOptimizeAway(x + 0x1.0p120);
9494 if (u >> 31 == 0) {
9595 return 0.0;
9696 } else {
......@@ -115,7 +115,7 @@ fn floor64(x: f64) f64 {
115115 }
116116
117117 if (e <= 0x3FF - 1) {
118 math.forceEval(y);
118 math.doNotOptimizeAway(y);
119119 if (u >> 63 != 0) {
120120 return -1.0;
121121 } else {
......@@ -142,7 +142,7 @@ fn floor128(x: f128) f128 {
142142 }
143143
144144 if (e <= 0x3FFF - 1) {
145 math.forceEval(y);
145 math.doNotOptimizeAway(y);
146146 if (u >> 127 != 0) {
147147 return -1.0;
148148 } else {
lib/std/math/log1p.zig+1-1
......@@ -62,7 +62,7 @@ fn log1p_32(x: f32) f32 {
6262 if ((ix << 1) < (0x33800000 << 1)) {
6363 // underflow if subnormal
6464 if (ix & 0x7F800000 == 0) {
65 math.forceEval(x * x);
65 math.doNotOptimizeAway(x * x);
6666 }
6767 return x;
6868 }
lib/std/math/round.zig+3-3
......@@ -43,7 +43,7 @@ fn round32(x_: f32) f32 {
4343 x = -x;
4444 }
4545 if (e < 0x7F - 1) {
46 math.forceEval(x + math.f32_toint);
46 math.doNotOptimizeAway(x + math.f32_toint);
4747 return 0 * @bitCast(f32, u);
4848 }
4949
......@@ -76,7 +76,7 @@ fn round64(x_: f64) f64 {
7676 x = -x;
7777 }
7878 if (e < 0x3ff - 1) {
79 math.forceEval(x + math.f64_toint);
79 math.doNotOptimizeAway(x + math.f64_toint);
8080 return 0 * @bitCast(f64, u);
8181 }
8282
......@@ -109,7 +109,7 @@ fn round128(x_: f128) f128 {
109109 x = -x;
110110 }
111111 if (e < 0x3FFF - 1) {
112 math.forceEval(x + math.f64_toint);
112 math.doNotOptimizeAway(x + math.f64_toint);
113113 return 0 * @bitCast(f128, u);
114114 }
115115
lib/std/math/tanh.zig+2-2
......@@ -67,7 +67,7 @@ fn tanh32(x: f32) f32 {
6767 }
6868 // |x| is subnormal
6969 else {
70 math.forceEval(x * x);
70 math.doNotOptimizeAway(x * x);
7171 t = x;
7272 }
7373
......@@ -112,7 +112,7 @@ fn tanh64(x: f64) f64 {
112112 }
113113 // |x| is subnormal
114114 else {
115 math.forceEval(@floatCast(f32, x));
115 math.doNotOptimizeAway(@floatCast(f32, x));
116116 t = x;
117117 }
118118
lib/std/math/trunc.zig+3-3
......@@ -46,7 +46,7 @@ fn trunc32(x: f32) f32 {
4646 if (u & m == 0) {
4747 return x;
4848 } else {
49 math.forceEval(x + 0x1p120);
49 math.doNotOptimizeAway(x + 0x1p120);
5050 return @bitCast(f32, u & ~m);
5151 }
5252}
......@@ -67,7 +67,7 @@ fn trunc64(x: f64) f64 {
6767 if (u & m == 0) {
6868 return x;
6969 } else {
70 math.forceEval(x + 0x1p120);
70 math.doNotOptimizeAway(x + 0x1p120);
7171 return @bitCast(f64, u & ~m);
7272 }
7373}
......@@ -88,7 +88,7 @@ fn trunc128(x: f128) f128 {
8888 if (u & m == 0) {
8989 return x;
9090 } else {
91 math.forceEval(x + 0x1p120);
91 math.doNotOptimizeAway(x + 0x1p120);
9292 return @bitCast(f128, u & ~m);
9393 }
9494}
lib/std/mem.zig+1-1
......@@ -2161,7 +2161,7 @@ pub fn alignForwardGeneric(comptime T: type, addr: T, alignment: T) T {
21612161/// Force an evaluation of the expression; this tries to prevent
21622162/// the compiler from optimizing the computation away even if the
21632163/// result eventually gets discarded.
2164pub fn forceEval(val: anytype) void {
2164pub fn doNotOptimizeAway(val: anytype) void {
21652165 asm volatile (""
21662166 :
21672167 : [val] "rm" (val)