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

Side by Side Diff: test/cctest/test-assembler-arm.cc

Issue 12391055: Cleaned up CpuFeature scope handling. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixed nits Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « src/x64/macro-assembler-x64.cc ('k') | test/cctest/test-assembler-ia32.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 T t; 245 T t;
246 246
247 // Create a function that accepts &t, and loads, manipulates, and stores 247 // Create a function that accepts &t, and loads, manipulates, and stores
248 // the doubles and floats. 248 // the doubles and floats.
249 Isolate* isolate = Isolate::Current(); 249 Isolate* isolate = Isolate::Current();
250 Assembler assm(isolate, NULL, 0); 250 Assembler assm(isolate, NULL, 0);
251 Label L, C; 251 Label L, C;
252 252
253 253
254 if (CpuFeatures::IsSupported(VFP3)) { 254 if (CpuFeatures::IsSupported(VFP3)) {
255 CpuFeatures::Scope scope(VFP3); 255 CpuFeatureScope scope(&assm, VFP3);
256 256
257 __ mov(ip, Operand(sp)); 257 __ mov(ip, Operand(sp));
258 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); 258 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit());
259 __ sub(fp, ip, Operand(4)); 259 __ sub(fp, ip, Operand(4));
260 260
261 __ mov(r4, Operand(r0)); 261 __ mov(r4, Operand(r0));
262 __ vldr(d6, r4, OFFSET_OF(T, a)); 262 __ vldr(d6, r4, OFFSET_OF(T, a));
263 __ vldr(d7, r4, OFFSET_OF(T, b)); 263 __ vldr(d7, r4, OFFSET_OF(T, b));
264 __ vadd(d5, d6, d7); 264 __ vadd(d5, d6, d7);
265 __ vstr(d5, r4, OFFSET_OF(T, c)); 265 __ vstr(d5, r4, OFFSET_OF(T, c));
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 363
364 TEST(5) { 364 TEST(5) {
365 // Test the ARMv7 bitfield instructions. 365 // Test the ARMv7 bitfield instructions.
366 InitializeVM(); 366 InitializeVM();
367 v8::HandleScope scope; 367 v8::HandleScope scope;
368 368
369 Isolate* isolate = Isolate::Current(); 369 Isolate* isolate = Isolate::Current();
370 Assembler assm(isolate, NULL, 0); 370 Assembler assm(isolate, NULL, 0);
371 371
372 if (CpuFeatures::IsSupported(ARMv7)) { 372 if (CpuFeatures::IsSupported(ARMv7)) {
373 CpuFeatures::Scope scope(ARMv7); 373 CpuFeatureScope scope(&assm, ARMv7);
374 // On entry, r0 = 0xAAAAAAAA = 0b10..10101010. 374 // On entry, r0 = 0xAAAAAAAA = 0b10..10101010.
375 __ ubfx(r0, r0, 1, 12); // 0b00..010101010101 = 0x555 375 __ ubfx(r0, r0, 1, 12); // 0b00..010101010101 = 0x555
376 __ sbfx(r0, r0, 0, 5); // 0b11..111111110101 = -11 376 __ sbfx(r0, r0, 0, 5); // 0b11..111111110101 = -11
377 __ bfc(r0, 1, 3); // 0b11..111111110001 = -15 377 __ bfc(r0, 1, 3); // 0b11..111111110001 = -15
378 __ mov(r1, Operand(7)); 378 __ mov(r1, Operand(7));
379 __ bfi(r0, r1, 3, 3); // 0b11..111111111001 = -7 379 __ bfi(r0, r1, 3, 3); // 0b11..111111111001 = -7
380 __ mov(pc, Operand(lr)); 380 __ mov(pc, Operand(lr));
381 381
382 CodeDesc desc; 382 CodeDesc desc;
383 assm.GetCode(&desc); 383 assm.GetCode(&desc);
(...skipping 16 matching lines...) Expand all
400 400
401 TEST(6) { 401 TEST(6) {
402 // Test saturating instructions. 402 // Test saturating instructions.
403 InitializeVM(); 403 InitializeVM();
404 v8::HandleScope scope; 404 v8::HandleScope scope;
405 405
406 Isolate* isolate = Isolate::Current(); 406 Isolate* isolate = Isolate::Current();
407 Assembler assm(isolate, NULL, 0); 407 Assembler assm(isolate, NULL, 0);
408 408
409 if (CpuFeatures::IsSupported(ARMv7)) { 409 if (CpuFeatures::IsSupported(ARMv7)) {
410 CpuFeatures::Scope scope(ARMv7); 410 CpuFeatureScope scope(&assm, ARMv7);
411 __ usat(r1, 8, Operand(r0)); // Sat 0xFFFF to 0-255 = 0xFF. 411 __ usat(r1, 8, Operand(r0)); // Sat 0xFFFF to 0-255 = 0xFF.
412 __ usat(r2, 12, Operand(r0, ASR, 9)); // Sat (0xFFFF>>9) to 0-4095 = 0x7F. 412 __ usat(r2, 12, Operand(r0, ASR, 9)); // Sat (0xFFFF>>9) to 0-4095 = 0x7F.
413 __ usat(r3, 1, Operand(r0, LSL, 16)); // Sat (0xFFFF<<16) to 0-1 = 0x0. 413 __ usat(r3, 1, Operand(r0, LSL, 16)); // Sat (0xFFFF<<16) to 0-1 = 0x0.
414 __ add(r0, r1, Operand(r2)); 414 __ add(r0, r1, Operand(r2));
415 __ add(r0, r0, Operand(r3)); 415 __ add(r0, r0, Operand(r3));
416 __ mov(pc, Operand(lr)); 416 __ mov(pc, Operand(lr));
417 417
418 CodeDesc desc; 418 CodeDesc desc;
419 assm.GetCode(&desc); 419 assm.GetCode(&desc);
420 Object* code = isolate->heap()->CreateCode( 420 Object* code = isolate->heap()->CreateCode(
(...skipping 23 matching lines...) Expand all
444 double value, 444 double value,
445 int expected, 445 int expected,
446 bool expected_exception = false) { 446 bool expected_exception = false) {
447 InitializeVM(); 447 InitializeVM();
448 v8::HandleScope scope; 448 v8::HandleScope scope;
449 449
450 Isolate* isolate = Isolate::Current(); 450 Isolate* isolate = Isolate::Current();
451 Assembler assm(isolate, NULL, 0); 451 Assembler assm(isolate, NULL, 0);
452 452
453 if (CpuFeatures::IsSupported(VFP3)) { 453 if (CpuFeatures::IsSupported(VFP3)) {
454 CpuFeatures::Scope scope(VFP3); 454 CpuFeatureScope scope(&assm, VFP3);
455 455
456 Label wrong_exception; 456 Label wrong_exception;
457 457
458 __ vmrs(r1); 458 __ vmrs(r1);
459 // Set custom FPSCR. 459 // Set custom FPSCR.
460 __ bic(r2, r1, Operand(kVFPRoundingModeMask | kVFPExceptionMask)); 460 __ bic(r2, r1, Operand(kVFPRoundingModeMask | kVFPExceptionMask));
461 __ orr(r2, r2, Operand(mode)); 461 __ orr(r2, r2, Operand(mode));
462 __ vmsr(r2); 462 __ vmsr(r2);
463 463
464 // Load value, convert, and move back result to r0 if everything went well. 464 // Load value, convert, and move back result to r0 if everything went well.
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 float h; 648 float h;
649 } F; 649 } F;
650 F f; 650 F f;
651 651
652 // Create a function that uses vldm/vstm to move some double and 652 // Create a function that uses vldm/vstm to move some double and
653 // single precision values around in memory. 653 // single precision values around in memory.
654 Isolate* isolate = Isolate::Current(); 654 Isolate* isolate = Isolate::Current();
655 Assembler assm(isolate, NULL, 0); 655 Assembler assm(isolate, NULL, 0);
656 656
657 if (CpuFeatures::IsSupported(VFP2)) { 657 if (CpuFeatures::IsSupported(VFP2)) {
658 CpuFeatures::Scope scope(VFP2); 658 CpuFeatureScope scope(&assm, VFP2);
659 659
660 __ mov(ip, Operand(sp)); 660 __ mov(ip, Operand(sp));
661 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); 661 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit());
662 __ sub(fp, ip, Operand(4)); 662 __ sub(fp, ip, Operand(4));
663 663
664 __ add(r4, r0, Operand(OFFSET_OF(D, a))); 664 __ add(r4, r0, Operand(OFFSET_OF(D, a)));
665 __ vldm(ia_w, r4, d0, d3); 665 __ vldm(ia_w, r4, d0, d3);
666 __ vldm(ia_w, r4, d4, d7); 666 __ vldm(ia_w, r4, d4, d7);
667 667
668 __ add(r4, r0, Operand(OFFSET_OF(D, a))); 668 __ add(r4, r0, Operand(OFFSET_OF(D, a)));
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 float h; 760 float h;
761 } F; 761 } F;
762 F f; 762 F f;
763 763
764 // Create a function that uses vldm/vstm to move some double and 764 // Create a function that uses vldm/vstm to move some double and
765 // single precision values around in memory. 765 // single precision values around in memory.
766 Isolate* isolate = Isolate::Current(); 766 Isolate* isolate = Isolate::Current();
767 Assembler assm(isolate, NULL, 0); 767 Assembler assm(isolate, NULL, 0);
768 768
769 if (CpuFeatures::IsSupported(VFP2)) { 769 if (CpuFeatures::IsSupported(VFP2)) {
770 CpuFeatures::Scope scope(VFP2); 770 CpuFeatureScope scope(&assm, VFP2);
771 771
772 __ mov(ip, Operand(sp)); 772 __ mov(ip, Operand(sp));
773 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); 773 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit());
774 __ sub(fp, ip, Operand(4)); 774 __ sub(fp, ip, Operand(4));
775 775
776 __ add(r4, r0, Operand(OFFSET_OF(D, a))); 776 __ add(r4, r0, Operand(OFFSET_OF(D, a)));
777 __ vldm(ia, r4, d0, d3); 777 __ vldm(ia, r4, d0, d3);
778 __ add(r4, r4, Operand(4 * 8)); 778 __ add(r4, r4, Operand(4 * 8));
779 __ vldm(ia, r4, d4, d7); 779 __ vldm(ia, r4, d4, d7);
780 780
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 float h; 876 float h;
877 } F; 877 } F;
878 F f; 878 F f;
879 879
880 // Create a function that uses vldm/vstm to move some double and 880 // Create a function that uses vldm/vstm to move some double and
881 // single precision values around in memory. 881 // single precision values around in memory.
882 Isolate* isolate = Isolate::Current(); 882 Isolate* isolate = Isolate::Current();
883 Assembler assm(isolate, NULL, 0); 883 Assembler assm(isolate, NULL, 0);
884 884
885 if (CpuFeatures::IsSupported(VFP2)) { 885 if (CpuFeatures::IsSupported(VFP2)) {
886 CpuFeatures::Scope scope(VFP2); 886 CpuFeatureScope scope(&assm, VFP2);
887 887
888 __ mov(ip, Operand(sp)); 888 __ mov(ip, Operand(sp));
889 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit()); 889 __ stm(db_w, sp, r4.bit() | fp.bit() | lr.bit());
890 __ sub(fp, ip, Operand(4)); 890 __ sub(fp, ip, Operand(4));
891 891
892 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8)); 892 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8));
893 __ vldm(db_w, r4, d4, d7); 893 __ vldm(db_w, r4, d4, d7);
894 __ vldm(db_w, r4, d0, d3); 894 __ vldm(db_w, r4, d0, d3);
895 895
896 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8)); 896 __ add(r4, r0, Operand(OFFSET_OF(D, h) + 8));
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 T t; 1063 T t;
1064 1064
1065 // Create a function that accepts &t, and loads, manipulates, and stores 1065 // Create a function that accepts &t, and loads, manipulates, and stores
1066 // the doubles and floats. 1066 // the doubles and floats.
1067 Isolate* isolate = Isolate::Current(); 1067 Isolate* isolate = Isolate::Current();
1068 Assembler assm(isolate, NULL, 0); 1068 Assembler assm(isolate, NULL, 0);
1069 Label L, C; 1069 Label L, C;
1070 1070
1071 1071
1072 if (CpuFeatures::IsSupported(VFP3)) { 1072 if (CpuFeatures::IsSupported(VFP3)) {
1073 CpuFeatures::Scope scope(VFP3); 1073 CpuFeatureScope scope(&assm, VFP3);
1074 1074
1075 __ stm(db_w, sp, r4.bit() | lr.bit()); 1075 __ stm(db_w, sp, r4.bit() | lr.bit());
1076 1076
1077 // Load a, b, c into d16, d17, d18. 1077 // Load a, b, c into d16, d17, d18.
1078 __ mov(r4, Operand(r0)); 1078 __ mov(r4, Operand(r0));
1079 __ vldr(d16, r4, OFFSET_OF(T, a)); 1079 __ vldr(d16, r4, OFFSET_OF(T, a));
1080 __ vldr(d17, r4, OFFSET_OF(T, b)); 1080 __ vldr(d17, r4, OFFSET_OF(T, b));
1081 __ vldr(d18, r4, OFFSET_OF(T, c)); 1081 __ vldr(d18, r4, OFFSET_OF(T, c));
1082 1082
1083 __ vneg(d25, d16); 1083 __ vneg(d25, d16);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1152 CHECK_EQ(2.75, t.x); 1152 CHECK_EQ(2.75, t.x);
1153 CHECK_EQ(1.5, t.y); 1153 CHECK_EQ(1.5, t.y);
1154 CHECK_EQ(17.0, t.z); 1154 CHECK_EQ(17.0, t.z);
1155 CHECK_EQ(14.7610017472335499, t.i); 1155 CHECK_EQ(14.7610017472335499, t.i);
1156 CHECK_EQ(16.0, t.j); 1156 CHECK_EQ(16.0, t.j);
1157 CHECK_EQ(73.8818412254460241, t.k); 1157 CHECK_EQ(73.8818412254460241, t.k);
1158 } 1158 }
1159 } 1159 }
1160 1160
1161 #undef __ 1161 #undef __
OLDNEW
« no previous file with comments | « src/x64/macro-assembler-x64.cc ('k') | test/cctest/test-assembler-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698