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

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

Issue 235153003: Handlify code allocation. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comments Created 6 years, 8 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 | « test/cctest/test-assembler-mips.cc ('k') | test/cctest/test-disasm-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 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 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 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 __ movq(rax, Immediate(13)); 568 __ movq(rax, Immediate(13));
569 __ popq(rsi); 569 __ popq(rsi);
570 __ popq(rdi); 570 __ popq(rdi);
571 __ popq(rdx); 571 __ popq(rdx);
572 __ popq(rcx); 572 __ popq(rcx);
573 __ popq(rbx); 573 __ popq(rbx);
574 __ ret(0); 574 __ ret(0);
575 575
576 CodeDesc desc; 576 CodeDesc desc;
577 assm.GetCode(&desc); 577 assm.GetCode(&desc);
578 Code* code = Code::cast(isolate->heap()->CreateCode( 578 Handle<Code> code = isolate->factory()->NewCode(
579 desc, 579 desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
580 Code::ComputeFlags(Code::STUB),
581 Handle<Code>())->ToObjectChecked());
582 CHECK(code->IsCode());
583 580
584 F0 f = FUNCTION_CAST<F0>(code->entry()); 581 F0 f = FUNCTION_CAST<F0>(code->entry());
585 int res = f(); 582 int res = f();
586 CHECK_EQ(42, res); 583 CHECK_EQ(42, res);
587 } 584 }
588 585
589 586
590 #ifdef __GNUC__ 587 #ifdef __GNUC__
591 #define ELEMENT_COUNT 4 588 #define ELEMENT_COUNT 4
592 589
(...skipping 27 matching lines...) Expand all
620 617
621 // Remove unused data from the stack. 618 // Remove unused data from the stack.
622 __ addq(rsp, Immediate(ELEMENT_COUNT * sizeof(int32_t))); 619 __ addq(rsp, Immediate(ELEMENT_COUNT * sizeof(int32_t)));
623 // Restore return address. 620 // Restore return address.
624 __ pushq(rcx); 621 __ pushq(rcx);
625 622
626 __ ret(0); 623 __ ret(0);
627 624
628 CodeDesc desc; 625 CodeDesc desc;
629 assm.GetCode(&desc); 626 assm.GetCode(&desc);
630 Code* code = Code::cast(isolate->heap()->CreateCode( 627 Handle<Code> code = isolate->factory()->NewCode(
631 desc, 628 desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
632 Code::ComputeFlags(Code::STUB),
633 Handle<Code>())->ToObjectChecked());
634 CHECK(code->IsCode());
635 629
636 F0 f = FUNCTION_CAST<F0>(code->entry()); 630 F0 f = FUNCTION_CAST<F0>(code->entry());
637 int res = f(); 631 int res = f();
638 args.GetReturnValue().Set(v8::Integer::New(CcTest::isolate(), res)); 632 args.GetReturnValue().Set(v8::Integer::New(CcTest::isolate(), res));
639 } 633 }
640 634
641 635
642 TEST(StackAlignmentForSSE2) { 636 TEST(StackAlignmentForSSE2) {
643 CcTest::InitializeVM(); 637 CcTest::InitializeVM();
644 CHECK_EQ(0, OS::ActivationFrameAlignment() % 16); 638 CHECK_EQ(0, OS::ActivationFrameAlignment() % 16);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 byte buffer[256]; 679 byte buffer[256];
686 Isolate* isolate = CcTest::i_isolate(); 680 Isolate* isolate = CcTest::i_isolate();
687 Assembler assm(isolate, buffer, sizeof(buffer)); 681 Assembler assm(isolate, buffer, sizeof(buffer));
688 { CpuFeatureScope fscope2(&assm, SSE4_1); 682 { CpuFeatureScope fscope2(&assm, SSE4_1);
689 __ extractps(rax, xmm0, 0x1); 683 __ extractps(rax, xmm0, 0x1);
690 __ ret(0); 684 __ ret(0);
691 } 685 }
692 686
693 CodeDesc desc; 687 CodeDesc desc;
694 assm.GetCode(&desc); 688 assm.GetCode(&desc);
695 Code* code = Code::cast(isolate->heap()->CreateCode( 689 Handle<Code> code = isolate->factory()->NewCode(
696 desc, 690 desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
697 Code::ComputeFlags(Code::STUB),
698 Handle<Code>())->ToObjectChecked());
699 CHECK(code->IsCode());
700 #ifdef OBJECT_PRINT 691 #ifdef OBJECT_PRINT
701 Code::cast(code)->Print(); 692 code->Print();
702 #endif 693 #endif
703 694
704 F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); 695 F3 f = FUNCTION_CAST<F3>(code->entry());
705 uint64_t value1 = V8_2PART_UINT64_C(0x12345678, 87654321); 696 uint64_t value1 = V8_2PART_UINT64_C(0x12345678, 87654321);
706 CHECK_EQ(0x12345678, f(uint64_to_double(value1))); 697 CHECK_EQ(0x12345678, f(uint64_to_double(value1)));
707 uint64_t value2 = V8_2PART_UINT64_C(0x87654321, 12345678); 698 uint64_t value2 = V8_2PART_UINT64_C(0x87654321, 12345678);
708 CHECK_EQ(0x87654321, f(uint64_to_double(value2))); 699 CHECK_EQ(0x87654321, f(uint64_to_double(value2)));
709 } 700 }
710 701
711 702
712 typedef int (*F6)(float x, float y); 703 typedef int (*F6)(float x, float y);
713 TEST(AssemblerX64SSE) { 704 TEST(AssemblerX64SSE) {
714 CcTest::InitializeVM(); 705 CcTest::InitializeVM();
715 706
716 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate()); 707 Isolate* isolate = reinterpret_cast<Isolate*>(CcTest::isolate());
717 HandleScope scope(isolate); 708 HandleScope scope(isolate);
718 v8::internal::byte buffer[256]; 709 v8::internal::byte buffer[256];
719 MacroAssembler assm(isolate, buffer, sizeof buffer); 710 MacroAssembler assm(isolate, buffer, sizeof buffer);
720 { 711 {
721 __ shufps(xmm0, xmm0, 0x0); // brocast first argument 712 __ shufps(xmm0, xmm0, 0x0); // brocast first argument
722 __ shufps(xmm1, xmm1, 0x0); // brocast second argument 713 __ shufps(xmm1, xmm1, 0x0); // brocast second argument
723 __ movaps(xmm2, xmm1); 714 __ movaps(xmm2, xmm1);
724 __ addps(xmm2, xmm0); 715 __ addps(xmm2, xmm0);
725 __ mulps(xmm2, xmm1); 716 __ mulps(xmm2, xmm1);
726 __ subps(xmm2, xmm0); 717 __ subps(xmm2, xmm0);
727 __ divps(xmm2, xmm1); 718 __ divps(xmm2, xmm1);
728 __ cvttss2si(rax, xmm2); 719 __ cvttss2si(rax, xmm2);
729 __ ret(0); 720 __ ret(0);
730 } 721 }
731 722
732 CodeDesc desc; 723 CodeDesc desc;
733 assm.GetCode(&desc); 724 assm.GetCode(&desc);
734 Code* code = Code::cast(isolate->heap()->CreateCode( 725 Handle<Code> code = isolate->factory()->NewCode(
735 desc, 726 desc,
736 Code::ComputeFlags(Code::STUB), 727 Code::ComputeFlags(Code::STUB),
737 Handle<Code>())->ToObjectChecked()); 728 Handle<Code>());
738 CHECK(code->IsCode());
739 #ifdef OBJECT_PRINT 729 #ifdef OBJECT_PRINT
740 Code::cast(code)->Print(); 730 code->Print();
741 #endif 731 #endif
742 732
743 F6 f = FUNCTION_CAST<F6>(Code::cast(code)->entry()); 733 F6 f = FUNCTION_CAST<F6>(code->entry());
744 CHECK_EQ(2, f(1.0, 2.0)); 734 CHECK_EQ(2, f(1.0, 2.0));
745 } 735 }
746 #undef __ 736 #undef __
OLDNEW
« no previous file with comments | « test/cctest/test-assembler-mips.cc ('k') | test/cctest/test-disasm-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698