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

Side by Side Diff: test/cctest/wasm/test-run-wasm.cc

Issue 1519823002: [wasm] Fixed FxxMin and FxxMax for cases where one operand is NaN. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « src/compiler/wasm-compiler.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 #include <string.h> 6 #include <string.h>
7 7
8 #include "src/compiler/graph-visualizer.h" 8 #include "src/compiler/graph-visualizer.h"
9 #include "src/compiler/js-graph.h" 9 #include "src/compiler/js-graph.h"
10 #include "src/compiler/wasm-compiler.h" 10 #include "src/compiler/wasm-compiler.h"
(...skipping 3150 matching lines...) Expand 10 before | Expand all | Expand 10 after
3161 FOR_FLOAT64_INPUTS(i) { CheckDoubleEq(nearbyint(*i), r.Call(*i)); } 3161 FOR_FLOAT64_INPUTS(i) { CheckDoubleEq(nearbyint(*i), r.Call(*i)); }
3162 } 3162 }
3163 3163
3164 3164
3165 TEST(Run_Wasm_F32Min) { 3165 TEST(Run_Wasm_F32Min) {
3166 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32()); 3166 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32());
3167 BUILD(r, WASM_F32_MIN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 3167 BUILD(r, WASM_F32_MIN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
3168 3168
3169 FOR_FLOAT32_INPUTS(i) { 3169 FOR_FLOAT32_INPUTS(i) {
3170 FOR_FLOAT32_INPUTS(j) { 3170 FOR_FLOAT32_INPUTS(j) {
3171 float expected = *i < *j ? *i : *j; 3171 float expected;
3172 if (*i < *j) {
3173 expected = *i;
3174 } else if (*j < *i) {
3175 expected = *j;
3176 } else if (*i != *i) {
3177 // If *i or *j is NaN, then the result is NaN.
3178 expected = *i;
3179 } else {
3180 expected = *j;
3181 }
3182
3172 CheckFloatEq(expected, r.Call(*i, *j)); 3183 CheckFloatEq(expected, r.Call(*i, *j));
3173 } 3184 }
3174 } 3185 }
3175 } 3186 }
3176 3187
3177 3188
3178 TEST(Run_Wasm_F64Min) { 3189 TEST(Run_Wasm_F64Min) {
3179 WasmRunner<double> r(MachineType::Float64(), MachineType::Float64()); 3190 WasmRunner<double> r(MachineType::Float64(), MachineType::Float64());
3180 BUILD(r, WASM_F64_MIN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 3191 BUILD(r, WASM_F64_MIN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
3181 3192
3182 FOR_FLOAT64_INPUTS(i) { 3193 FOR_FLOAT64_INPUTS(i) {
3183 FOR_FLOAT64_INPUTS(j) { 3194 FOR_FLOAT64_INPUTS(j) {
3184 double expected = *i < *j ? *i : *j; 3195 double expected;
3196 if (*i < *j) {
3197 expected = *i;
3198 } else if (*j < *i) {
3199 expected = *j;
3200 } else if (*i != *i) {
3201 // If *i or *j is NaN, then the result is NaN.
3202 expected = *i;
3203 } else {
3204 expected = *j;
3205 }
3206
3185 CheckDoubleEq(expected, r.Call(*i, *j)); 3207 CheckDoubleEq(expected, r.Call(*i, *j));
3186 } 3208 }
3187 } 3209 }
3188 } 3210 }
3189 3211
3190 3212
3191 TEST(Run_Wasm_F32Max) { 3213 TEST(Run_Wasm_F32Max) {
3192 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32()); 3214 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32());
3193 BUILD(r, WASM_F32_MAX(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 3215 BUILD(r, WASM_F32_MAX(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
3194 3216
3195 FOR_FLOAT32_INPUTS(i) { 3217 FOR_FLOAT32_INPUTS(i) {
3196 FOR_FLOAT32_INPUTS(j) { 3218 FOR_FLOAT32_INPUTS(j) {
3197 float expected = *i > *j ? *i : *j; 3219 float expected;
3220 if (*i > *j) {
3221 expected = *i;
3222 } else if (*j > *i) {
3223 expected = *j;
3224 } else if (*i != *i) {
3225 // If *i or *j is NaN, then the result is NaN.
3226 expected = *i;
3227 } else {
3228 expected = *j;
3229 }
3230
3198 CheckFloatEq(expected, r.Call(*i, *j)); 3231 CheckFloatEq(expected, r.Call(*i, *j));
3199 } 3232 }
3200 } 3233 }
3201 } 3234 }
3202 3235
3203 3236
3204 TEST(Run_Wasm_F64Max) { 3237 TEST(Run_Wasm_F64Max) {
3205 WasmRunner<double> r(MachineType::Float64(), MachineType::Float64()); 3238 WasmRunner<double> r(MachineType::Float64(), MachineType::Float64());
3206 BUILD(r, WASM_F64_MAX(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 3239 BUILD(r, WASM_F64_MAX(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
3207 3240
3208 FOR_FLOAT64_INPUTS(i) { 3241 FOR_FLOAT64_INPUTS(i) {
3209 FOR_FLOAT64_INPUTS(j) { 3242 FOR_FLOAT64_INPUTS(j) {
3210 double expected = *i > *j ? *i : *j; 3243 double expected;
3244 if (*i > *j) {
3245 expected = *i;
3246 } else if (*j > *i) {
3247 expected = *j;
3248 } else if (*i != *i) {
3249 // If *i or *j is NaN, then the result is NaN.
3250 expected = *i;
3251 } else {
3252 expected = *j;
3253 }
3254
3211 CheckDoubleEq(expected, r.Call(*i, *j)); 3255 CheckDoubleEq(expected, r.Call(*i, *j));
3212 } 3256 }
3213 } 3257 }
3214 } 3258 }
3215 3259
3216 3260
3217 #if WASM_64 3261 #if WASM_64
3218 TEST(Run_Wasm_F32SConvertI64) { 3262 TEST(Run_Wasm_F32SConvertI64) {
3219 WasmRunner<float> r(MachineType::Int64()); 3263 WasmRunner<float> r(MachineType::Int64());
3220 BUILD(r, WASM_F32_SCONVERT_I64(WASM_GET_LOCAL(0))); 3264 BUILD(r, WASM_F32_SCONVERT_I64(WASM_GET_LOCAL(0)));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
3257 3301
3258 3302
3259 TEST(Run_Wasm_F32CopySign) { 3303 TEST(Run_Wasm_F32CopySign) {
3260 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32()); 3304 WasmRunner<float> r(MachineType::Float32(), MachineType::Float32());
3261 BUILD(r, WASM_F32_COPYSIGN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1))); 3305 BUILD(r, WASM_F32_COPYSIGN(WASM_GET_LOCAL(0), WASM_GET_LOCAL(1)));
3262 3306
3263 FOR_FLOAT32_INPUTS(i) { 3307 FOR_FLOAT32_INPUTS(i) {
3264 FOR_FLOAT32_INPUTS(j) { CheckFloatEq(copysign(*i, *j), r.Call(*i, *j)); } 3308 FOR_FLOAT32_INPUTS(j) { CheckFloatEq(copysign(*i, *j), r.Call(*i, *j)); }
3265 } 3309 }
3266 } 3310 }
OLDNEW
« no previous file with comments | « src/compiler/wasm-compiler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698