13233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 25c838251403b0be9a882540f1922577abba4c872ager@chromium.org// Redistribution and use in source and binary forms, with or without 35c838251403b0be9a882540f1922577abba4c872ager@chromium.org// modification, are permitted provided that the following conditions are 45c838251403b0be9a882540f1922577abba4c872ager@chromium.org// met: 55c838251403b0be9a882540f1922577abba4c872ager@chromium.org// 65c838251403b0be9a882540f1922577abba4c872ager@chromium.org// * Redistributions of source code must retain the above copyright 75c838251403b0be9a882540f1922577abba4c872ager@chromium.org// notice, this list of conditions and the following disclaimer. 85c838251403b0be9a882540f1922577abba4c872ager@chromium.org// * Redistributions in binary form must reproduce the above 95c838251403b0be9a882540f1922577abba4c872ager@chromium.org// copyright notice, this list of conditions and the following 105c838251403b0be9a882540f1922577abba4c872ager@chromium.org// disclaimer in the documentation and/or other materials provided 115c838251403b0be9a882540f1922577abba4c872ager@chromium.org// with the distribution. 125c838251403b0be9a882540f1922577abba4c872ager@chromium.org// * Neither the name of Google Inc. nor the names of its 135c838251403b0be9a882540f1922577abba4c872ager@chromium.org// contributors may be used to endorse or promote products derived 145c838251403b0be9a882540f1922577abba4c872ager@chromium.org// from this software without specific prior written permission. 155c838251403b0be9a882540f1922577abba4c872ager@chromium.org// 165c838251403b0be9a882540f1922577abba4c872ager@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 175c838251403b0be9a882540f1922577abba4c872ager@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 185c838251403b0be9a882540f1922577abba4c872ager@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 195c838251403b0be9a882540f1922577abba4c872ager@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 205c838251403b0be9a882540f1922577abba4c872ager@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 215c838251403b0be9a882540f1922577abba4c872ager@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 225c838251403b0be9a882540f1922577abba4c872ager@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 235c838251403b0be9a882540f1922577abba4c872ager@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 245c838251403b0be9a882540f1922577abba4c872ager@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255c838251403b0be9a882540f1922577abba4c872ager@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 265c838251403b0be9a882540f1922577abba4c872ager@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275c838251403b0be9a882540f1922577abba4c872ager@chromium.org 28196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8.h" 295c838251403b0be9a882540f1922577abba4c872ager@chromium.org 30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/disassembler.h" 31196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/factory.h" 32196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/macro-assembler.h" 33196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/mips/macro-assembler-mips.h" 34196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/mips/simulator-mips.h" 355c838251403b0be9a882540f1922577abba4c872ager@chromium.org 36196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "test/cctest/cctest.h" 375c838251403b0be9a882540f1922577abba4c872ager@chromium.org 385c838251403b0be9a882540f1922577abba4c872ager@chromium.orgusing namespace v8::internal; 395c838251403b0be9a882540f1922577abba4c872ager@chromium.org 405c838251403b0be9a882540f1922577abba4c872ager@chromium.org 415c838251403b0be9a882540f1922577abba4c872ager@chromium.org// Define these function prototypes to match JSEntryFunction in execution.cc. 425c838251403b0be9a882540f1922577abba4c872ager@chromium.orgtypedef Object* (*F1)(int x, int p1, int p2, int p3, int p4); 435c838251403b0be9a882540f1922577abba4c872ager@chromium.orgtypedef Object* (*F2)(int x, int y, int p2, int p3, int p4); 445c838251403b0be9a882540f1922577abba4c872ager@chromium.orgtypedef Object* (*F3)(void* p, int p1, int p2, int p3, int p4); 455c838251403b0be9a882540f1922577abba4c872ager@chromium.org 465c838251403b0be9a882540f1922577abba4c872ager@chromium.org 475c838251403b0be9a882540f1922577abba4c872ager@chromium.org#define __ assm. 485c838251403b0be9a882540f1922577abba4c872ager@chromium.org 497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 505c838251403b0be9a882540f1922577abba4c872ager@chromium.orgTEST(MIPS0) { 51e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 52528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 532bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 545c838251403b0be9a882540f1922577abba4c872ager@chromium.org 552bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 565c838251403b0be9a882540f1922577abba4c872ager@chromium.org 575c838251403b0be9a882540f1922577abba4c872ager@chromium.org // Addition. 585c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ addu(v0, a0, a1); 595c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ jr(ra); 605c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 615c838251403b0be9a882540f1922577abba4c872ager@chromium.org 625c838251403b0be9a882540f1922577abba4c872ager@chromium.org CodeDesc desc; 635c838251403b0be9a882540f1922577abba4c872ager@chromium.org assm.GetCode(&desc); 649fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 659fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 669fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F2 f = FUNCTION_CAST<F2>(code->entry()); 675c838251403b0be9a882540f1922577abba4c872ager@chromium.org int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 0xab0, 0xc, 0, 0, 0)); 685c838251403b0be9a882540f1922577abba4c872ager@chromium.org ::printf("f() = %d\n", res); 695c838251403b0be9a882540f1922577abba4c872ager@chromium.org CHECK_EQ(0xabc, res); 705c838251403b0be9a882540f1922577abba4c872ager@chromium.org} 715c838251403b0be9a882540f1922577abba4c872ager@chromium.org 725c838251403b0be9a882540f1922577abba4c872ager@chromium.org 735c838251403b0be9a882540f1922577abba4c872ager@chromium.orgTEST(MIPS1) { 74e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 75528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 762bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 775c838251403b0be9a882540f1922577abba4c872ager@chromium.org 782bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 795c838251403b0be9a882540f1922577abba4c872ager@chromium.org Label L, C; 805c838251403b0be9a882540f1922577abba4c872ager@chromium.org 815c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ mov(a1, a0); 825c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(v0, 0); 835c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ b(&C); 845c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 855c838251403b0be9a882540f1922577abba4c872ager@chromium.org 865c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ bind(&L); 877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addu(v0, v0, a1); 885c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ addiu(a1, a1, -1); 895c838251403b0be9a882540f1922577abba4c872ager@chromium.org 905c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ bind(&C); 915c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ xori(v1, a1, 0); 927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&L, ne, v1, Operand(0)); 935c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 945c838251403b0be9a882540f1922577abba4c872ager@chromium.org 955c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ jr(ra); 965c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 975c838251403b0be9a882540f1922577abba4c872ager@chromium.org 985c838251403b0be9a882540f1922577abba4c872ager@chromium.org CodeDesc desc; 995c838251403b0be9a882540f1922577abba4c872ager@chromium.org assm.GetCode(&desc); 1009fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 1019fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 1029fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F1 f = FUNCTION_CAST<F1>(code->entry()); 1035c838251403b0be9a882540f1922577abba4c872ager@chromium.org int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 50, 0, 0, 0, 0)); 1045c838251403b0be9a882540f1922577abba4c872ager@chromium.org ::printf("f() = %d\n", res); 1055c838251403b0be9a882540f1922577abba4c872ager@chromium.org CHECK_EQ(1275, res); 1065c838251403b0be9a882540f1922577abba4c872ager@chromium.org} 1075c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1085c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1095c838251403b0be9a882540f1922577abba4c872ager@chromium.orgTEST(MIPS2) { 110e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 111528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 1122bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 1135c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1142bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 1155c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1165c838251403b0be9a882540f1922577abba4c872ager@chromium.org Label exit, error; 1175c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1185c838251403b0be9a882540f1922577abba4c872ager@chromium.org // ----- Test all instructions. 1195c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1205c838251403b0be9a882540f1922577abba4c872ager@chromium.org // Test lui, ori, and addiu, used in the li pseudo-instruction. 1215c838251403b0be9a882540f1922577abba4c872ager@chromium.org // This way we can then safely load registers with chosen values. 1225c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1235c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ ori(t0, zero_reg, 0); 1245c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ lui(t0, 0x1234); 1255c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ ori(t0, t0, 0); 1265c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ ori(t0, t0, 0x0f0f); 1275c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ ori(t0, t0, 0xf0f0); 1285c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ addiu(t1, t0, 1); 1295c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ addiu(t2, t1, -0x10); 1305c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1315c838251403b0be9a882540f1922577abba4c872ager@chromium.org // Load values in temporary registers. 1325c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t0, 0x00000004); 1335c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t1, 0x00001234); 1345c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t2, 0x12345678); 1355c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t3, 0x7fffffff); 1365c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t4, 0xfffffffc); 1375c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t5, 0xffffedcc); 1385c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t6, 0xedcba988); 1395c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(t7, 0x80000000); 1405c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1415c838251403b0be9a882540f1922577abba4c872ager@chromium.org // SPECIAL class. 1425c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ srl(v0, t2, 8); // 0x00123456 1435c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ sll(v0, v0, 11); // 0x91a2b000 1445c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ sra(v0, v0, 3); // 0xf2345600 1455c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ srav(v0, v0, t0); // 0xff234560 1465c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ sllv(v0, v0, t0); // 0xf2345600 1475c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ srlv(v0, v0, t0); // 0x0f234560 1487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(0x0f234560)); 1495c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1505c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addu(v0, t0, t1); // 0x00001238 1527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ subu(v0, v0, t0); // 0x00001234 1537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(0x00001234)); 1545c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1555c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ addu(v1, t3, t0); 1567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v1, Operand(0x80000003)); 1575c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1585c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ subu(v1, t7, t0); // 0x7ffffffc 1597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v1, Operand(0x7ffffffc)); 1605c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1615c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1625c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ and_(v0, t1, t2); // 0x00001230 1635c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ or_(v0, v0, t1); // 0x00001234 1645c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ xor_(v0, v0, t2); // 0x1234444c 1655c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nor(v0, v0, t2); // 0xedcba987 1667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(0xedcba983)); 1675c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1685c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1695c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ slt(v0, t7, t3); 1707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(0x1)); 1715c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1725c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ sltu(v0, t7, t3); 1735e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ Branch(&error, ne, v0, Operand(zero_reg)); 1745c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1755c838251403b0be9a882540f1922577abba4c872ager@chromium.org // End of SPECIAL class. 1765c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1777516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addiu(v0, zero_reg, 0x7421); // 0x00007421 1787516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addiu(v0, v0, -0x1); // 0x00007420 1795c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ addiu(v0, v0, -0x20); // 0x00007400 1807516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(0x00007400)); 1815c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1825c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ addiu(v1, t3, 0x1); // 0x80000000 1837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v1, Operand(0x80000000)); 1845c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1855c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1865c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ slti(v0, t1, 0x00002000); // 0x1 1875c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ slti(v0, v0, 0xffff8000); // 0x0 1885e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ Branch(&error, ne, v0, Operand(zero_reg)); 1895c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1905c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ sltiu(v0, t1, 0x00002000); // 0x1 1915c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ sltiu(v0, v0, 0x00008000); // 0x1 1927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(0x1)); 1935c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 1945c838251403b0be9a882540f1922577abba4c872ager@chromium.org 1955c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ andi(v0, t1, 0xf0f0); // 0x00001030 1965c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ ori(v0, v0, 0x8a00); // 0x00009a30 1975c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ xori(v0, v0, 0x83cc); // 0x000019fc 1987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(0x000019fc)); 1995c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 2005c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ lui(v1, 0x8123); // 0x81230000 2017516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v1, Operand(0x81230000)); 2025c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 2035c838251403b0be9a882540f1922577abba4c872ager@chromium.org 2047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Bit twiddling instructions & conditional moves. 2057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Uses t0-t7 as set above. 2063233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org __ Clz(v0, t0); // 29 2073233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org __ Clz(v1, t1); // 19 2087516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addu(v0, v0, v1); // 48 2093233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org __ Clz(v1, t2); // 3 2107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addu(v0, v0, v1); // 51 2113233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org __ Clz(v1, t7); // 0 2127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addu(v0, v0, v1); // 51 2137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, v0, Operand(51)); 2143233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org __ Movn(a0, t3, t0); // Move a0<-t3 (t0 is NOT 0). 2157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ins(a0, t1, 12, 8); // 0x7ff34fff 2167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, a0, Operand(0x7ff34fff)); 2173233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org __ Movz(a0, t6, t7); // a0 not updated (t7 is NOT 0). 2187516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ext(a1, a0, 8, 12); // 0x34f 2197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, a1, Operand(0x34f)); 2203233d2f30cad1f77ff9f43fcbee12f182b18f6b6mstarzinger@chromium.org __ Movz(a0, t6, v1); // a0<-t6, v0 is 0, from 8 instr back. 2217516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&error, ne, a0, Operand(t6)); 2227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2235c838251403b0be9a882540f1922577abba4c872ager@chromium.org // Everything was correctly executed. Load the expected result. 2245c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ li(v0, 0x31415926); 2255c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ b(&exit); 2265c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 2275c838251403b0be9a882540f1922577abba4c872ager@chromium.org 2285c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ bind(&error); 2295c838251403b0be9a882540f1922577abba4c872ager@chromium.org // Got an error. Return a wrong result. 2307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(v0, 666); 2315c838251403b0be9a882540f1922577abba4c872ager@chromium.org 2325c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ bind(&exit); 2335c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ jr(ra); 2345c838251403b0be9a882540f1922577abba4c872ager@chromium.org __ nop(); 2355c838251403b0be9a882540f1922577abba4c872ager@chromium.org 2365c838251403b0be9a882540f1922577abba4c872ager@chromium.org CodeDesc desc; 2375c838251403b0be9a882540f1922577abba4c872ager@chromium.org assm.GetCode(&desc); 2389fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 2399fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 2409fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F2 f = FUNCTION_CAST<F2>(code->entry()); 2415c838251403b0be9a882540f1922577abba4c872ager@chromium.org int res = reinterpret_cast<int>(CALL_GENERATED_CODE(f, 0xab0, 0xc, 0, 0, 0)); 2425c838251403b0be9a882540f1922577abba4c872ager@chromium.org ::printf("f() = %d\n", res); 2435c838251403b0be9a882540f1922577abba4c872ager@chromium.org CHECK_EQ(0x31415926, res); 2445c838251403b0be9a882540f1922577abba4c872ager@chromium.org} 2455c838251403b0be9a882540f1922577abba4c872ager@chromium.org 2467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS3) { 2487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test floating point instructions. 249e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 250528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 2512bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 2527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 2547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double a; 2557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double b; 2567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double c; 2577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double d; 2587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double e; 2597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double f; 2607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double g; 26159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org double h; 26259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org double i; 2637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 2647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 2657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Create a function that accepts &t, and loads, manipulates, and stores 2677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // the doubles t.a ... t.f. 2682bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 2697516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Label L, C; 2707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 271e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); 272e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); 273e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ add_d(f8, f4, f6); 274e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f8, MemOperand(a0, OFFSET_OF(T, c)) ); // c = a + b. 2757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 276e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ mov_d(f10, f8); // c 277e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ neg_d(f12, f6); // -b 278e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sub_d(f10, f10, f12); 279e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, d)) ); // d = c - (-b). 2807516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 281e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f4, MemOperand(a0, OFFSET_OF(T, b)) ); // b = a. 2827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 283e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ li(t0, 120); 284e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ mtc1(t0, f14); 285e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cvt_d_w(f14, f14); // f14 = 120.0. 286e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ mul_d(f10, f10, f14); 287e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, e)) ); // e = d * 120 = 1.8066e16. 2887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 289e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ div_d(f12, f10, f4); 290e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f12, MemOperand(a0, OFFSET_OF(T, f)) ); // f = e / a = 120.44. 2917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 292e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sqrt_d(f14, f12); 293e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f14, MemOperand(a0, OFFSET_OF(T, g)) ); 294e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // g = sqrt(f) = 10.97451593465515908537 2957516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 2965e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (IsMipsArchVariant(kMips32r2)) { 29759297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, h)) ); 29859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, i)) ); 29959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org __ madd_d(f14, f6, f4, f6); 30059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org __ sdc1(f14, MemOperand(a0, OFFSET_OF(T, h)) ); 30159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org } 30259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 303e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ jr(ra); 304e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 3057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 306e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CodeDesc desc; 307e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org assm.GetCode(&desc); 3089fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 3099fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 3109fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 311e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.a = 1.5e14; 312e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.b = 2.75e11; 313e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.c = 0.0; 314e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.d = 0.0; 315e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.e = 0.0; 316e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.f = 0.0; 317e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.h = 1.5; 318e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.i = 2.75; 319e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 320e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org USE(dummy); 321e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1.5e14, t.a); 322e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1.5e14, t.b); 323e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1.50275e14, t.c); 324e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1.50550e14, t.d); 325e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1.8066e16, t.e); 326e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(120.44, t.f); 327e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(10.97451593465515908537, t.g); 3285e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (IsMipsArchVariant(kMips32r2)) { 3291510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org CHECK_EQ(6.875, t.h); 3301510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 3317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 3327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 3337516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 3347516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS4) { 3357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test moves between floating point and integer registers. 336e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 337528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 3382bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 3397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 3407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 3417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double a; 3427516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double b; 3437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double c; 3447516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 3457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 3467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 3472bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Assembler assm(isolate, NULL, 0); 3487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Label L, C; 3497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 350e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); 351e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); 3527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 353e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Swap f4 and f6, by using four integer registers, t0-t3. 3545e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (!IsFp64Mode()) { 3555e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t0, f4); 3565e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t1, f5); 3575e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t2, f6); 3585e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t3, f7); 3595e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 3605e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mtc1(t0, f6); 3615e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mtc1(t1, f7); 3625e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mtc1(t2, f4); 3635e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mtc1(t3, f5); 3645e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } else { 3655e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org DCHECK(!IsMipsArchVariant(kMips32r1) && !IsMipsArchVariant(kLoongson)); 3665e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t0, f4); 3675e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfhc1(t1, f4); 3685e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t2, f6); 3695e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfhc1(t3, f6); 3705e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 3715e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mtc1(t0, f6); 3725e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mthc1(t1, f6); 3735e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mtc1(t2, f4); 3745e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mthc1(t3, f4); 3755e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } 376e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Store the swapped f4 and f5 back to memory. 377e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); 378e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f6, MemOperand(a0, OFFSET_OF(T, c)) ); 3797516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 380e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ jr(ra); 381e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 3827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 383e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CodeDesc desc; 384e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org assm.GetCode(&desc); 3859fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 3869fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 3879fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 388e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.a = 1.5e22; 389e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.b = 2.75e11; 390e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.c = 17.17; 391e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 392e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org USE(dummy); 3937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 394e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(2.75e11, t.a); 395e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(2.75e11, t.b); 396e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1.5e22, t.c); 3977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 3987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 3997516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS5) { 4017516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test conversions between doubles and integers. 402e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 403528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 4042bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 4057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 4077516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double a; 4087516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double b; 4097516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int i; 4107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int j; 4117516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 4127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 4137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4142bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Assembler assm(isolate, NULL, 0); 4157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Label L, C; 4167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 417e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Load all structure elements to registers. 418e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); 419e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); 420e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, i)) ); 421e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ lw(t1, MemOperand(a0, OFFSET_OF(T, j)) ); 4227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 423e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Convert double in f4 to int in element i. 424e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cvt_w_d(f8, f4); 425e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ mfc1(t2, f8); 426e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, i)) ); 4277516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 428e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Convert double in f6 to int in element j. 429e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cvt_w_d(f10, f6); 430e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ mfc1(t3, f10); 431e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, j)) ); 4327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 433e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Convert int in original i (t0) to double in a. 434e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ mtc1(t0, f12); 435e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cvt_d_w(f0, f12); 436e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f0, MemOperand(a0, OFFSET_OF(T, a)) ); 4377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 438e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Convert int in original j (t1) to double in b. 439e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ mtc1(t1, f14); 440e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cvt_d_w(f2, f14); 441e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f2, MemOperand(a0, OFFSET_OF(T, b)) ); 442e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 443e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ jr(ra); 444e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 445e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 446e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CodeDesc desc; 447e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org assm.GetCode(&desc); 4489fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 4499fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 4509fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 451e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.a = 1.5e4; 452e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.b = 2.75e8; 453e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.i = 12345678; 454e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.j = -100000; 455e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 456e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org USE(dummy); 457e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 458e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(12345678.0, t.a); 459e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(-100000.0, t.b); 460e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(15000, t.i); 461e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(275000000, t.j); 4627516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 4637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS6) { 4667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test simple memory loads and stores. 467e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 468528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 4692bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 4707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4717516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 4727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org uint32_t ui; 4737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t si; 4747516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t r1; 4757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t r2; 4767516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t r3; 4777516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t r4; 4787516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t r5; 4797516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t r6; 4807516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 4817516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 4827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4832bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Assembler assm(isolate, NULL, 0); 4847516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Label L, C; 4857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Basic word load/store. 4877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, ui)) ); 4887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, r1)) ); 4897516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4907516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // lh with positive data. 4917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lh(t1, MemOperand(a0, OFFSET_OF(T, ui)) ); 4927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, r2)) ); 4937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4947516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // lh with negative data. 4957516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lh(t2, MemOperand(a0, OFFSET_OF(T, si)) ); 4967516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, r3)) ); 4977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 4987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // lhu with negative data. 4997516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lhu(t3, MemOperand(a0, OFFSET_OF(T, si)) ); 5007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, r4)) ); 5017516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5027516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // lb with negative data. 5037516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lb(t4, MemOperand(a0, OFFSET_OF(T, si)) ); 5047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t4, MemOperand(a0, OFFSET_OF(T, r5)) ); 5057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // sh writes only 1/2 of word. 5077516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lui(t5, 0x3333); 5087516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ ori(t5, t5, 0x3333); 5097516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t5, MemOperand(a0, OFFSET_OF(T, r6)) ); 5107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lhu(t5, MemOperand(a0, OFFSET_OF(T, si)) ); 5117516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sh(t5, MemOperand(a0, OFFSET_OF(T, r6)) ); 5127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ jr(ra); 5147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 5157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CodeDesc desc; 5177516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org assm.GetCode(&desc); 5189fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 5199fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 5209fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 5217516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.ui = 0x11223344; 5227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.si = 0x99aabbcc; 5237516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 5247516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org USE(dummy); 5257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5267516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x11223344, t.r1); 527731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#if __BYTE_ORDER == __LITTLE_ENDIAN 5287516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x3344, t.r2); 5297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xffffbbcc, t.r3); 5307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x0000bbcc, t.r4); 5317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xffffffcc, t.r5); 5327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x3333bbcc, t.r6); 533731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#elif __BYTE_ORDER == __BIG_ENDIAN 534731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x1122, t.r2); 535731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xffff99aa, t.r3); 536731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x000099aa, t.r4); 537731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xffffff99, t.r5); 538731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x99aa3333, t.r6); 539731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#else 540731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#error Unknown endianness 541731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#endif 5427516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 5437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5447516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS7) { 5467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test floating point compare and branch instructions. 547e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 548528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 5492bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 5507516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 5527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double a; 5537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double b; 5547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double c; 5557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double d; 5567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double e; 5577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double f; 5587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result; 5597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 5607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 5617516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5627516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Create a function that accepts &t, and loads, manipulates, and stores 5637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // the doubles t.a ... t.f. 5642bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 5657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Label neither_is_nan, less_than, outa_here; 5667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 567e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); 568e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) ); 5695e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (!IsMipsArchVariant(kMips32r6)) { 570e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ c(UN, D, f4, f6); 571e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ bc1f(&neither_is_nan); 5725e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } else { 5735e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ cmp(UN, L, f2, f4, f6); 5745e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ bc1eqz(&neither_is_nan, f2); 5755e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } 576e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 577e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(zero_reg, MemOperand(a0, OFFSET_OF(T, result)) ); 578e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ Branch(&outa_here); 5797516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 580e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ bind(&neither_is_nan); 5817516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 5825e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (IsMipsArchVariant(kLoongson)) { 583e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ c(OLT, D, f6, f4); 584e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ bc1t(&less_than); 5855e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org } else if (IsMipsArchVariant(kMips32r6)) { 5865e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ cmp(OLT, L, f2, f6, f4); 5875e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ bc1nez(&less_than, f2); 588e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } else { 589e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ c(OLT, D, f6, f4, 2); 590e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ bc1t(&less_than, 2); 591e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org } 5925e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 593e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 594e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(zero_reg, MemOperand(a0, OFFSET_OF(T, result)) ); 595e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ Branch(&outa_here); 5967516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 597e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ bind(&less_than); 598e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ Addu(t0, zero_reg, Operand(1)); 599e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, result)) ); // Set true. 6007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6017516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 602e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // This test-case should have additional tests. 6037516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 604e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ bind(&outa_here); 6057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 606e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ jr(ra); 607e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 608e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 609e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CodeDesc desc; 610e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org assm.GetCode(&desc); 6119fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 6129fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 6139fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 614e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.a = 1.5e14; 615e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.b = 2.75e11; 616e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.c = 2.0; 617e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.d = -4.0; 618e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.e = 0.0; 619e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.f = 0.0; 620e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.result = 0; 621e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 622e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org USE(dummy); 623e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1.5e14, t.a); 624e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(2.75e11, t.b); 625e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(1, t.result); 6267516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 6277516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6287516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS8) { 6307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test ROTR and ROTRV instructions. 631e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 632528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 6332bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 6347516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 6367516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t input; 6377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotr_4; 6387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotr_8; 6397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotr_12; 6407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotr_16; 6417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotr_20; 6427516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotr_24; 6437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotr_28; 6447516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotrv_4; 6457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotrv_8; 6467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotrv_12; 6477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotrv_16; 6487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotrv_20; 6497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotrv_24; 6507516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t result_rotrv_28; 6517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 6527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 6537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6542bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 6557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Basic word load. 6577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, input)) ); 6587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // ROTR instruction (called through the Ror macro). 6607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t1, t0, 0x0004); 6617516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t2, t0, 0x0008); 6627516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t3, t0, 0x000c); 6637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t4, t0, 0x0010); 6647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t5, t0, 0x0014); 6657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t6, t0, 0x0018); 6667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t7, t0, 0x001c); 6677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Basic word store. 6697516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, result_rotr_4)) ); 6707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, result_rotr_8)) ); 6717516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, result_rotr_12)) ); 6727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t4, MemOperand(a0, OFFSET_OF(T, result_rotr_16)) ); 6737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t5, MemOperand(a0, OFFSET_OF(T, result_rotr_20)) ); 6747516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t6, MemOperand(a0, OFFSET_OF(T, result_rotr_24)) ); 6757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t7, MemOperand(a0, OFFSET_OF(T, result_rotr_28)) ); 6767516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6777516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // ROTRV instruction (called through the Ror macro). 6787516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(t7, 0x0004); 6797516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t1, t0, t7); 6807516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(t7, 0x0008); 6817516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t2, t0, t7); 6827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(t7, 0x000C); 6837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t3, t0, t7); 6847516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(t7, 0x0010); 6857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t4, t0, t7); 6867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(t7, 0x0014); 6877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t5, t0, t7); 6887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(t7, 0x0018); 6897516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t6, t0, t7); 6907516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ li(t7, 0x001C); 6917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Ror(t7, t0, t7); 6927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 6937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Basic word store. 6947516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, result_rotrv_4)) ); 6957516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, result_rotrv_8)) ); 6967516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, result_rotrv_12)) ); 6977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t4, MemOperand(a0, OFFSET_OF(T, result_rotrv_16)) ); 6987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t5, MemOperand(a0, OFFSET_OF(T, result_rotrv_20)) ); 6997516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t6, MemOperand(a0, OFFSET_OF(T, result_rotrv_24)) ); 7007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t7, MemOperand(a0, OFFSET_OF(T, result_rotrv_28)) ); 7017516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7027516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ jr(ra); 7037516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 7047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CodeDesc desc; 7067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org assm.GetCode(&desc); 7079fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 7089fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 7099fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 7107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.input = 0x12345678; 7117516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0x0, 0, 0, 0); 7127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org USE(dummy); 7137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x81234567, t.result_rotr_4); 7147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x78123456, t.result_rotr_8); 7157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x67812345, t.result_rotr_12); 7167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x56781234, t.result_rotr_16); 7177516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x45678123, t.result_rotr_20); 7187516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x34567812, t.result_rotr_24); 7197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x23456781, t.result_rotr_28); 7207516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7217516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x81234567, t.result_rotrv_4); 7227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x78123456, t.result_rotrv_8); 7237516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x67812345, t.result_rotrv_12); 7247516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x56781234, t.result_rotrv_16); 7257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x45678123, t.result_rotrv_20); 7267516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x34567812, t.result_rotrv_24); 7277516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x23456781, t.result_rotrv_28); 7287516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 7297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS9) { 7327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test BRANCH improvements. 733e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 734528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 7352bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 7367516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7372bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 7387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Label exit, exit2, exit3; 7397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7405e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ Branch(&exit, ge, a0, Operand(zero_reg)); 7417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&exit2, ge, a0, Operand(0x00001FFF)); 7427516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Branch(&exit3, ge, a0, Operand(0x0001FFFF)); 7437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7447516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ bind(&exit); 7457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ bind(&exit2); 7467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ bind(&exit3); 7477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ jr(ra); 7487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 7497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7507516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CodeDesc desc; 7517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org assm.GetCode(&desc); 7529fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org isolate->factory()->NewCode( 7539fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 7547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 7557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS10) { 7587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test conversions between doubles and long integers. 7597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test hos the long ints map to FP regs pairs. 760e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 761528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 7622bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 7637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 7657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double a; 7667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double b; 7677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t dbl_mant; 7687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t dbl_exp; 7690a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org int32_t word; 7700a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org int32_t b_word; 7717516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 7727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 7737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7742bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Assembler assm(isolate, NULL, 0); 7757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Label L, C; 7767516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 7775e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (!IsMipsArchVariant(kMips32r2)) return; 7785e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 7795e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org // Load all structure elements to registers. 7805e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, a))); 7815e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 7825e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org // Save the raw bits of the double. 7835e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t0, f0); 7845e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t1, f1); 7855e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, dbl_mant))); 7865e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, dbl_exp))); 7875e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 7885e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org // Convert double in f0 to long, save hi/lo parts. 7895e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ cvt_w_d(f0, f0); 7905e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mfc1(t0, f0); // f0 has a 32-bits word. 7915e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, word))); 7925e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 7935e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org // Convert the b long integers to double b. 7945e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, b_word))); 7955e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ mtc1(t0, f8); // f8 has a 32-bits word. 7965e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ cvt_d_w(f10, f8); 7975e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, b))); 7985e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 7995e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ jr(ra); 8005e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org __ nop(); 8015e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 8025e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CodeDesc desc; 8035e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org assm.GetCode(&desc); 8045e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 8055e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 8065e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 8075e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org t.a = 2.147483646e+09; // 0x7FFFFFFE -> 0xFF80000041DFFFFF as double. 8085e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org t.b_word = 0x0ff00ff0; // 0x0FF00FF0 -> 0x as double. 8095e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 8105e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org USE(dummy); 8115e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org 8125e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CHECK_EQ(0x41DFFFFF, t.dbl_exp); 8135e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CHECK_EQ(0xFF800000, t.dbl_mant); 8145e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CHECK_EQ(0X7FFFFFFE, t.word); 8155e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org // 0x0FF00FF0 -> 2.6739096+e08 8165e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org CHECK_EQ(2.6739096e08, t.b); 8177516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 8187516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8207516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS11) { 8215e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org // Do not run test on MIPS32r6, as these instructions are removed. 8225e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org if (IsMipsArchVariant(kMips32r6)) return; 8237516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test LWL, LWR, SWL and SWR instructions. 824e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 825528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 8262bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 8277516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8287516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 8297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t reg_init; 8307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t mem_init; 8317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwl_0; 8327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwl_1; 8337516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwl_2; 8347516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwl_3; 8357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwr_0; 8367516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwr_1; 8377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwr_2; 8387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t lwr_3; 8397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swl_0; 8407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swl_1; 8417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swl_2; 8427516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swl_3; 8437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swr_0; 8447516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swr_1; 8457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swr_2; 8467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t swr_3; 8477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 8487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 8497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8502bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Assembler assm(isolate, NULL, 0); 8517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test all combinations of LWL and vAddr. 8537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwl(t0, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 8557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, lwl_0)) ); 8567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwl(t1, MemOperand(a0, OFFSET_OF(T, mem_init) + 1) ); 8597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, lwl_1)) ); 8607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8617516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8627516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwl(t2, MemOperand(a0, OFFSET_OF(T, mem_init) + 2) ); 8637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, lwl_2)) ); 8647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t3, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwl(t3, MemOperand(a0, OFFSET_OF(T, mem_init) + 3) ); 8677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, lwl_3)) ); 8687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8697516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test all combinations of LWR and vAddr. 8707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8717516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwr(t0, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 8727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, lwr_0)) ); 8737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8747516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwr(t1, MemOperand(a0, OFFSET_OF(T, mem_init) + 1) ); 8767516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, lwr_1)) ); 8777516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8787516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8797516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwr(t2, MemOperand(a0, OFFSET_OF(T, mem_init) + 2) ); 8807516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, lwr_2)) ); 8817516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t3, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lwr(t3, MemOperand(a0, OFFSET_OF(T, mem_init) + 3) ); 8847516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, lwr_3)) ); 8857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test all combinations of SWL and vAddr. 8877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 8887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, swl_0)) ); 8897516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8907516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swl(t0, MemOperand(a0, OFFSET_OF(T, swl_0)) ); 8917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 8937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, swl_1)) ); 8947516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 8957516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swl(t1, MemOperand(a0, OFFSET_OF(T, swl_1) + 1) ); 8967516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 8977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 8987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, swl_2)) ); 8997516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 9007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swl(t2, MemOperand(a0, OFFSET_OF(T, swl_2) + 2) ); 9017516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9027516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t3, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 9037516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, swl_3)) ); 9047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t3, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 9057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swl(t3, MemOperand(a0, OFFSET_OF(T, swl_3) + 3) ); 9067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9077516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test all combinations of SWR and vAddr. 9087516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 9097516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, swr_0)) ); 9107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 9117516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swr(t0, MemOperand(a0, OFFSET_OF(T, swr_0)) ); 9127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9137516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 9147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t1, MemOperand(a0, OFFSET_OF(T, swr_1)) ); 9157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 9167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swr(t1, MemOperand(a0, OFFSET_OF(T, swr_1) + 1) ); 9177516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9187516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 9197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t2, MemOperand(a0, OFFSET_OF(T, swr_2)) ); 9207516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 9217516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swr(t2, MemOperand(a0, OFFSET_OF(T, swr_2) + 2) ); 9227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9237516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t3, MemOperand(a0, OFFSET_OF(T, mem_init)) ); 9247516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t3, MemOperand(a0, OFFSET_OF(T, swr_3)) ); 9257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t3, MemOperand(a0, OFFSET_OF(T, reg_init)) ); 9267516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ swr(t3, MemOperand(a0, OFFSET_OF(T, swr_3) + 3) ); 9277516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9287516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ jr(ra); 9297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 9307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CodeDesc desc; 9327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org assm.GetCode(&desc); 9339fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 9349fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 9359fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 9367516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.reg_init = 0xaabbccdd; 9377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.mem_init = 0x11223344; 9387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 9407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org USE(dummy); 9417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 942731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#if __BYTE_ORDER == __LITTLE_ENDIAN 9437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x44bbccdd, t.lwl_0); 9447516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x3344ccdd, t.lwl_1); 9457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x223344dd, t.lwl_2); 9467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x11223344, t.lwl_3); 9477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x11223344, t.lwr_0); 9497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xaa112233, t.lwr_1); 9507516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xaabb1122, t.lwr_2); 9517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xaabbcc11, t.lwr_3); 9527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x112233aa, t.swl_0); 9547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x1122aabb, t.swl_1); 9557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0x11aabbcc, t.swl_2); 9567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xaabbccdd, t.swl_3); 9577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xaabbccdd, t.swr_0); 9597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xbbccdd44, t.swr_1); 9607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xccdd3344, t.swr_2); 9617516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(0xdd223344, t.swr_3); 962731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#elif __BYTE_ORDER == __BIG_ENDIAN 963731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x11223344, t.lwl_0); 964731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x223344dd, t.lwl_1); 965731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x3344ccdd, t.lwl_2); 966731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x44bbccdd, t.lwl_3); 967731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org 968731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xaabbcc11, t.lwr_0); 969731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xaabb1122, t.lwr_1); 970731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xaa112233, t.lwr_2); 971731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x11223344, t.lwr_3); 972731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org 973731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xaabbccdd, t.swl_0); 974731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x11aabbcc, t.swl_1); 975731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x1122aabb, t.swl_2); 976731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0x112233aa, t.swl_3); 977731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org 978731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xdd223344, t.swr_0); 979731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xccdd3344, t.swr_1); 980731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xbbccdd44, t.swr_2); 981731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org CHECK_EQ(0xaabbccdd, t.swr_3); 982731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#else 983731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#error Unknown endianness 984731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org#endif 9857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 9867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS12) { 989e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 990528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 9912bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 9927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 9937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 9947516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t x; 9957516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t y; 9967516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t y1; 9977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t y2; 9987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t y3; 9997516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t y4; 10007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 10017516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 10027516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10032bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 10047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10057516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ mov(t6, fp); // Save frame pointer. 10067516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ mov(fp, a0); // Access struct T by fp. 10077516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(a0, OFFSET_OF(T, y)) ); 10087516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t3, MemOperand(a0, OFFSET_OF(T, y4)) ); 10097516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addu(t1, t0, t3); 10117516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ subu(t4, t0, t3); 10127516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 101383a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t0); // These instructions disappear after opt. 10147516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Pop(); 10157516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ addu(t0, t0, t0); 10167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 10177516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ Pop(); // These instructions disappear after opt. 101883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t3); 10197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 102083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t3); // These instructions disappear after opt. 102183a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ pop(t3); 10227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 102383a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t3); 102483a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ pop(t4); 10257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 10267516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t0, MemOperand(fp, OFFSET_OF(T, y)) ); 10277516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t0, MemOperand(fp, OFFSET_OF(T, y)) ); 10287516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 10297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ sw(t0, MemOperand(fp, OFFSET_OF(T, y)) ); 10307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(fp, OFFSET_OF(T, y)) ); 10317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 103283a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t1); 10337516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t1, MemOperand(fp, OFFSET_OF(T, y)) ); 103483a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ pop(t1); 10357516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 103683a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t1); 10377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(fp, OFFSET_OF(T, y)) ); 103883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ pop(t1); 10397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 104083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t1); 10417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(fp, OFFSET_OF(T, y)) ); 104283a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ pop(t2); 10437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 104483a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t2); 10457516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(fp, OFFSET_OF(T, y)) ); 104683a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ pop(t1); 10477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 104883a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ push(t1); 10497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ lw(t2, MemOperand(fp, OFFSET_OF(T, y)) ); 105083a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org __ pop(t3); 10517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 10527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ mov(fp, t6); 10547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ jr(ra); 10557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org __ nop(); 10567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CodeDesc desc; 10587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org assm.GetCode(&desc); 10599fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 10609fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 10619fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 10627516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.x = 1; 10637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.y = 2; 10647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.y1 = 3; 10657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.y2 = 4; 10667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.y3 = 0XBABA; 10677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org t.y4 = 0xDEDA; 10687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10697516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 10707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org USE(dummy); 10717516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org CHECK_EQ(3, t.y1); 10737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 10747516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10767516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS13) { 10777516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test Cvt_d_uw and Trunc_uw_d macros. 1078e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 1079528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 10802bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 10817516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 10837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double cvt_big_out; 10847516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double cvt_small_out; 10857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org uint32_t trunc_big_out; 10867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org uint32_t trunc_small_out; 10877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org uint32_t cvt_big_in; 10887516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org uint32_t cvt_small_in; 10897516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 10907516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 10917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 10922bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 10937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1094e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, cvt_small_in))); 1095e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ Cvt_d_uw(f10, t0, f22); 1096e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f10, MemOperand(a0, OFFSET_OF(T, cvt_small_out))); 10977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1098e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ Trunc_uw_d(f10, f10, f22); 1099e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ swc1(f10, MemOperand(a0, OFFSET_OF(T, trunc_small_out))); 11007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1101e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(t0, MemOperand(a0, OFFSET_OF(T, cvt_big_in))); 1102e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ Cvt_d_uw(f8, t0, f22); 1103e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sdc1(f8, MemOperand(a0, OFFSET_OF(T, cvt_big_out))); 11047516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1105e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ Trunc_uw_d(f8, f8, f22); 1106e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ swc1(f8, MemOperand(a0, OFFSET_OF(T, trunc_big_out))); 11077516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1108e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ jr(ra); 1109e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 11107516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1111e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CodeDesc desc; 1112e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org assm.GetCode(&desc); 11139fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 11149fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 11159fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 11167516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1117e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.cvt_big_in = 0xFFFFFFFF; 1118e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.cvt_small_in = 333; 11197516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1120e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 1121e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org USE(dummy); 11227516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1123e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(t.cvt_big_out, static_cast<double>(t.cvt_big_in)); 1124e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(t.cvt_small_out, static_cast<double>(t.cvt_small_in)); 11257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1126e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(static_cast<int>(t.trunc_big_out), static_cast<int>(t.cvt_big_in)); 1127e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_EQ(static_cast<int>(t.trunc_small_out), 1128e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org static_cast<int>(t.cvt_small_in)); 11297516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 11307516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11317516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11327516f05132429850aa326421ed3e25f23b4c071blrn@chromium.orgTEST(MIPS14) { 11337516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Test round, floor, ceil, trunc, cvt. 1134e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 1135528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 11362bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 11377516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11387516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#define ROUND_STRUCT_ELEMENT(x) \ 11397516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t x##_up_out; \ 11407516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t x##_down_out; \ 11417516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t neg_##x##_up_out; \ 11427516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t neg_##x##_down_out; \ 114383a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org uint32_t x##_err1_out; \ 114483a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org uint32_t x##_err2_out; \ 114583a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org uint32_t x##_err3_out; \ 114683a4728861129dc263ded92157f3e6389f851f19karlklose@chromium.org uint32_t x##_err4_out; \ 11477516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org int32_t x##_invalid_result; 11487516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11497516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org typedef struct { 11507516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double round_up_in; 11517516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double round_down_in; 11527516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double neg_round_up_in; 11537516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double neg_round_down_in; 11547516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double err1_in; 11557516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double err2_in; 11567516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double err3_in; 11577516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double err4_in; 11587516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org ROUND_STRUCT_ELEMENT(round) 11607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org ROUND_STRUCT_ELEMENT(floor) 11617516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org ROUND_STRUCT_ELEMENT(ceil) 11627516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org ROUND_STRUCT_ELEMENT(trunc) 11637516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org ROUND_STRUCT_ELEMENT(cvt) 11647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } T; 11657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org T t; 11667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#undef ROUND_STRUCT_ELEMENT 11687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11692bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org MacroAssembler assm(isolate, NULL, 0); 11707516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1171e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Save FCSR. 1172e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cfc1(a1, FCSR); 1173e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Disable FPU exceptions. 1174e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ctc1(zero_reg, FCSR); 11757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#define RUN_ROUND_TEST(x) \ 1176e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, round_up_in))); \ 1177e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1178e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ swc1(f0, MemOperand(a0, OFFSET_OF(T, x##_up_out))); \ 1179e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org \ 1180e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, round_down_in))); \ 1181e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1182e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ swc1(f0, MemOperand(a0, OFFSET_OF(T, x##_down_out))); \ 1183e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org \ 1184e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, neg_round_up_in))); \ 1185e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1186e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ swc1(f0, MemOperand(a0, OFFSET_OF(T, neg_##x##_up_out))); \ 1187e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org \ 1188e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, neg_round_down_in))); \ 1189e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1190e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ swc1(f0, MemOperand(a0, OFFSET_OF(T, neg_##x##_down_out))); \ 1191e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org \ 1192e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, err1_in))); \ 1193e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ctc1(zero_reg, FCSR); \ 1194e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1195e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cfc1(a2, FCSR); \ 1196e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(a2, MemOperand(a0, OFFSET_OF(T, x##_err1_out))); \ 1197e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org \ 1198e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, err2_in))); \ 1199e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ctc1(zero_reg, FCSR); \ 1200e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1201e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cfc1(a2, FCSR); \ 1202e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(a2, MemOperand(a0, OFFSET_OF(T, x##_err2_out))); \ 1203e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org \ 1204e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, err3_in))); \ 1205e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ctc1(zero_reg, FCSR); \ 1206e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1207e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cfc1(a2, FCSR); \ 1208e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(a2, MemOperand(a0, OFFSET_OF(T, x##_err3_out))); \ 1209e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org \ 1210e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ldc1(f0, MemOperand(a0, OFFSET_OF(T, err4_in))); \ 1211e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ctc1(zero_reg, FCSR); \ 1212e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ x##_w_d(f0, f0); \ 1213e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ cfc1(a2, FCSR); \ 1214e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ sw(a2, MemOperand(a0, OFFSET_OF(T, x##_err4_out))); \ 1215e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ swc1(f0, MemOperand(a0, OFFSET_OF(T, x##_invalid_result))); 1216e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1217e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org RUN_ROUND_TEST(round) 1218e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org RUN_ROUND_TEST(floor) 1219e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org RUN_ROUND_TEST(ceil) 1220e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org RUN_ROUND_TEST(trunc) 1221e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org RUN_ROUND_TEST(cvt) 1222e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1223e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org // Restore FCSR. 1224e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ ctc1(a1, FCSR); 12257516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1226e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ jr(ra); 1227e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org __ nop(); 12287516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1229e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CodeDesc desc; 1230e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org assm.GetCode(&desc); 12319fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Code> code = isolate->factory()->NewCode( 12329fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); 12339fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org F3 f = FUNCTION_CAST<F3>(code->entry()); 12347516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1235e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.round_up_in = 123.51; 1236e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.round_down_in = 123.49; 1237e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.neg_round_up_in = -123.5; 1238e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.neg_round_down_in = -123.49; 1239e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.err1_in = 123.51; 1240e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.err2_in = 1; 1241e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.err3_in = static_cast<double>(1) + 0xFFFFFFFF; 1242e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org t.err4_in = NAN; 12437516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1244e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); 1245e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org USE(dummy); 12467516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 1247d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com#define GET_FPU_ERR(x) (static_cast<int>(x & kFCSRFlagMask)) 1248d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com#define CHECK_ROUND_RESULT(type) \ 1249d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com CHECK(GET_FPU_ERR(t.type##_err1_out) & kFCSRInexactFlagMask); \ 1250d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com CHECK_EQ(0, GET_FPU_ERR(t.type##_err2_out)); \ 1251d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com CHECK(GET_FPU_ERR(t.type##_err3_out) & kFCSRInvalidOpFlagMask); \ 1252d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com CHECK(GET_FPU_ERR(t.type##_err4_out) & kFCSRInvalidOpFlagMask); \ 1253d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com CHECK_EQ(kFPUInvalidResult, t.type##_invalid_result); 1254d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com 1255e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_ROUND_RESULT(round); 1256e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_ROUND_RESULT(floor); 1257e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_ROUND_RESULT(ceil); 1258e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CHECK_ROUND_RESULT(cvt); 12597516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org} 12607516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 126180c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 126280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.orgTEST(MIPS15) { 126380c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org // Test chaining of label usages within instructions (issue 1644). 1264e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org CcTest::InitializeVM(); 1265528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Isolate* isolate = CcTest::i_isolate(); 12662bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org HandleScope scope(isolate); 12672bda543d75374afd8d7e98f56ca99a57ae1b7bd1svenpanne@chromium.org Assembler assm(isolate, NULL, 0); 126880c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 126980c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org Label target; 127080c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org __ beq(v0, v1, &target); 12711805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org __ nop(); 127280c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org __ bne(v0, v1, &target); 12731805e21b0aece8c05f4960a5c0751c4463557891fschneider@chromium.org __ nop(); 127480c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org __ bind(&target); 127580c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org __ nop(); 127680c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org} 127780c42ed5ace766a3a02b30a53a25e5e81e234723yangguo@chromium.org 12785c838251403b0be9a882540f1922577abba4c872ager@chromium.org#undef __ 1279