OLD | NEW |
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 6039 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6050 TEST(maddf_msubf_d) { | 6050 TEST(maddf_msubf_d) { |
6051 if (kArchVariant != kMips64r6) return; | 6051 if (kArchVariant != kMips64r6) return; |
6052 helper_madd_msub_maddf_msubf<double>([](MacroAssembler& assm) { | 6052 helper_madd_msub_maddf_msubf<double>([](MacroAssembler& assm) { |
6053 __ maddf_d(f4, f6, f8); | 6053 __ maddf_d(f4, f6, f8); |
6054 __ Sdc1(f4, MemOperand(a0, offsetof(TestCaseMaddMsub<double>, fd_add))); | 6054 __ Sdc1(f4, MemOperand(a0, offsetof(TestCaseMaddMsub<double>, fd_add))); |
6055 __ msubf_d(f16, f6, f8); | 6055 __ msubf_d(f16, f6, f8); |
6056 __ Sdc1(f16, MemOperand(a0, offsetof(TestCaseMaddMsub<double>, fd_sub))); | 6056 __ Sdc1(f16, MemOperand(a0, offsetof(TestCaseMaddMsub<double>, fd_sub))); |
6057 }); | 6057 }); |
6058 } | 6058 } |
6059 | 6059 |
| 6060 uint64_t run_Dins(uint64_t imm, uint64_t source, uint16_t pos, uint16_t size) { |
| 6061 Isolate* isolate = CcTest::i_isolate(); |
| 6062 HandleScope scope(isolate); |
| 6063 |
| 6064 MacroAssembler assm(isolate, NULL, 0, v8::internal::CodeObjectRequired::kYes); |
| 6065 |
| 6066 __ li(v0, imm); |
| 6067 __ li(t0, source); |
| 6068 __ Dins(v0, t0, pos, size); |
| 6069 __ jr(ra); |
| 6070 __ nop(); |
| 6071 |
| 6072 CodeDesc desc; |
| 6073 assm.GetCode(&desc); |
| 6074 Handle<Code> code = isolate->factory()->NewCode( |
| 6075 desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
| 6076 F2 f = FUNCTION_CAST<F2>(code->entry()); |
| 6077 |
| 6078 uint64_t res = reinterpret_cast<uint64_t>( |
| 6079 CALL_GENERATED_CODE(isolate, f, 0, 0, 0, 0, 0)); |
| 6080 |
| 6081 return res; |
| 6082 } |
| 6083 |
| 6084 TEST(Dins) { |
| 6085 CcTest::InitializeVM(); |
| 6086 |
| 6087 // Test Dins macro-instruction. |
| 6088 |
| 6089 struct TestCaseDins { |
| 6090 uint64_t imm; |
| 6091 uint64_t source; |
| 6092 uint16_t pos; |
| 6093 uint16_t size; |
| 6094 uint64_t expected_res; |
| 6095 }; |
| 6096 |
| 6097 // We load imm to v0 and source to t0 and then call |
| 6098 // Dins(v0, t0, pos, size) to test cases listed below. |
| 6099 struct TestCaseDins tc[] = { |
| 6100 // imm, source, pos, size, expected_res |
| 6101 {0x5555555555555555, 0x1ABCDEF01, 31, 1, 0x55555555D5555555}, |
| 6102 {0x5555555555555555, 0x1ABCDEF02, 30, 2, 0x5555555595555555}, |
| 6103 {0x201234567, 0x1FABCDEFF, 0, 32, 0x2FABCDEFF}, |
| 6104 {0x201234567, 0x7FABCDEFF, 31, 2, 0x381234567}, |
| 6105 {0x800000000, 0x7FABCDEFF, 0, 33, 0x9FABCDEFF}, |
| 6106 {0x1234, 0xABCDABCDABCDABCD, 0, 64, 0xABCDABCDABCDABCD}, |
| 6107 {0xABCD, 0xABCEABCF, 32, 1, 0x10000ABCD}, |
| 6108 {0xABCD, 0xABCEABCF, 63, 1, 0x800000000000ABCD}, |
| 6109 {0xABCD, 0xABC1ABC2ABC3ABC4, 32, 32, 0xABC3ABC40000ABCD}, |
| 6110 }; |
| 6111 |
| 6112 size_t nr_test_cases = sizeof(tc) / sizeof(TestCaseDins); |
| 6113 for (size_t i = 0; i < nr_test_cases; ++i) { |
| 6114 CHECK_EQ(tc[i].expected_res, |
| 6115 run_Dins(tc[i].imm, tc[i].source, tc[i].pos, tc[i].size)); |
| 6116 } |
| 6117 } |
| 6118 |
6060 #undef __ | 6119 #undef __ |
OLD | NEW |