1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008 Apple Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * are met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * documentation and/or other materials provided with the distribution. 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef MacroAssembler_h 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#define MacroAssembler_h 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if ENABLE(ASSEMBLER) 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 31d0825bca7fe65beaee391d30da42e937db621564Steve Block#if CPU(ARM_THUMB2) 325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "MacroAssemblerARMv7.h" 335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace JSC { typedef MacroAssemblerARMv7 MacroAssemblerBase; }; 345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 35d0825bca7fe65beaee391d30da42e937db621564Steve Block#elif CPU(ARM_TRADITIONAL) 360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "MacroAssemblerARM.h" 370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace JSC { typedef MacroAssemblerARM MacroAssemblerBase; }; 380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#elif CPU(MIPS) 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "MacroAssemblerMIPS.h" 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace JSC { 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocktypedef MacroAssemblerMIPS MacroAssemblerBase; 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 45d0825bca7fe65beaee391d30da42e937db621564Steve Block#elif CPU(X86) 468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "MacroAssemblerX86.h" 478f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace JSC { typedef MacroAssemblerX86 MacroAssemblerBase; }; 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 49d0825bca7fe65beaee391d30da42e937db621564Steve Block#elif CPU(X86_64) 508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "MacroAssemblerX86_64.h" 518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace JSC { typedef MacroAssemblerX86_64 MacroAssemblerBase; }; 52635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#elif CPU(SH4) 542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "MacroAssemblerSH4.h" 552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochnamespace JSC { 562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochtypedef MacroAssemblerSH4 MacroAssemblerBase; 572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}; 582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#else 608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#error "The MacroAssembler is not supported on this platform." 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace JSC { 658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass MacroAssembler : public MacroAssemblerBase { 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectpublic: 688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian using MacroAssemblerBase::pop; 708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian using MacroAssemblerBase::jump; 718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian using MacroAssemblerBase::branch32; 728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian using MacroAssemblerBase::branch16; 73d0825bca7fe65beaee391d30da42e937db621564Steve Block#if CPU(X86_64) 748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian using MacroAssemblerBase::branchPtr; 758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian using MacroAssemblerBase::branchTestPtr; 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Platform agnostic onvenience functions, 808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // described in terms of other macro assembly methods. 818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void pop() 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 832bde8e466a4451c7319e3a072d118917957d6554Steve Block addPtr(TrustedImm32(sizeof(void*)), stackPointerRegister); 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void peek(RegisterID dest, int index = 0) 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian loadPtr(Address(stackPointerRegister, (index * sizeof(void*))), dest); 89635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 90635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void poke(RegisterID src, int index = 0) 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian storePtr(src, Address(stackPointerRegister, (index * sizeof(void*)))); 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 95635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 962bde8e466a4451c7319e3a072d118917957d6554Steve Block void poke(TrustedImm32 value, int index = 0) 97635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian store32(value, Address(stackPointerRegister, (index * sizeof(void*)))); 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1012bde8e466a4451c7319e3a072d118917957d6554Steve Block void poke(TrustedImmPtr imm, int index = 0) 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian storePtr(imm, Address(stackPointerRegister, (index * sizeof(void*)))); 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Backwards banches, these are currently all implemented using existing forwards branch mechanisms. 1082bde8e466a4451c7319e3a072d118917957d6554Steve Block void branchPtr(Condition cond, RegisterID op1, TrustedImmPtr imm, Label target) 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian branchPtr(cond, op1, imm).linkTo(target, this); 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void branch32(Condition cond, RegisterID op1, RegisterID op2, Label target) 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian branch32(cond, op1, op2).linkTo(target, this); 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1182bde8e466a4451c7319e3a072d118917957d6554Steve Block void branch32(Condition cond, RegisterID op1, TrustedImm32 imm, Label target) 119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian branch32(cond, op1, imm).linkTo(target, this); 121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 1228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void branch32(Condition cond, RegisterID left, Address right, Label target) 124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian branch32(cond, left, right).linkTo(target, this); 126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 1278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void branch16(Condition cond, BaseIndex left, RegisterID right, Label target) 129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian branch16(cond, left, right).linkTo(target, this); 131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void branchTestPtr(Condition cond, RegisterID reg, Label target) 134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian branchTestPtr(cond, reg).linkTo(target, this); 136635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void jump(Label target) 139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian jump().linkTo(target, this); 141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Ptr methods 1458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // On 32-bit platforms (i.e. x86), these methods directly map onto their 32-bit equivalents. 146d0825bca7fe65beaee391d30da42e937db621564Steve Block // FIXME: should this use a test for 32-bitness instead of this specific exception? 147d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !CPU(X86_64) 1488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void addPtr(RegisterID src, RegisterID dest) 149635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian add32(src, dest); 151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1532bde8e466a4451c7319e3a072d118917957d6554Steve Block void addPtr(TrustedImm32 imm, RegisterID srcDest) 154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian add32(imm, srcDest); 156635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 157635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1582bde8e466a4451c7319e3a072d118917957d6554Steve Block void addPtr(TrustedImmPtr imm, RegisterID dest) 1598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 1602bde8e466a4451c7319e3a072d118917957d6554Steve Block add32(TrustedImm32(imm), dest); 161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1632bde8e466a4451c7319e3a072d118917957d6554Steve Block void addPtr(TrustedImm32 imm, RegisterID src, RegisterID dest) 164635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian add32(imm, src, dest); 166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 1678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void andPtr(RegisterID src, RegisterID dest) 169635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian and32(src, dest); 171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 1728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1732bde8e466a4451c7319e3a072d118917957d6554Steve Block void andPtr(TrustedImm32 imm, RegisterID srcDest) 174635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian and32(imm, srcDest); 176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 1778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 178635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void orPtr(RegisterID src, RegisterID dest) 179635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 180635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project or32(src, dest); 181635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 182635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1832bde8e466a4451c7319e3a072d118917957d6554Steve Block void orPtr(TrustedImmPtr imm, RegisterID dest) 184635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 1852bde8e466a4451c7319e3a072d118917957d6554Steve Block or32(TrustedImm32(imm), dest); 186635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 187635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1882bde8e466a4451c7319e3a072d118917957d6554Steve Block void orPtr(TrustedImm32 imm, RegisterID dest) 189635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 190635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project or32(imm, dest); 191635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 192635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 193635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void subPtr(RegisterID src, RegisterID dest) 194635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 195635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project sub32(src, dest); 196635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 197635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1982bde8e466a4451c7319e3a072d118917957d6554Steve Block void subPtr(TrustedImm32 imm, RegisterID dest) 199635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 200635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project sub32(imm, dest); 201635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 202635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2032bde8e466a4451c7319e3a072d118917957d6554Steve Block void subPtr(TrustedImmPtr imm, RegisterID dest) 204635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2052bde8e466a4451c7319e3a072d118917957d6554Steve Block sub32(TrustedImm32(imm), dest); 206635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 207635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 208635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void xorPtr(RegisterID src, RegisterID dest) 209635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 210635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project xor32(src, dest); 211635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2132bde8e466a4451c7319e3a072d118917957d6554Steve Block void xorPtr(TrustedImm32 imm, RegisterID srcDest) 214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project xor32(imm, srcDest); 216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 219635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void loadPtr(ImplicitAddress address, RegisterID dest) 220635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 221635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project load32(address, dest); 222635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 223635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 224635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void loadPtr(BaseIndex address, RegisterID dest) 225635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 226635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project load32(address, dest); 227635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 228635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 229635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void loadPtr(void* address, RegisterID dest) 230635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 231635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project load32(address, dest); 232635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 233635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian DataLabel32 loadPtrWithAddressOffsetPatch(Address address, RegisterID dest) 235635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return load32WithAddressOffsetPatch(address, dest); 237635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 238635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2392bde8e466a4451c7319e3a072d118917957d6554Steve Block void setPtr(Condition cond, RegisterID left, TrustedImm32 right, RegisterID dest) 240635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 241f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch set32Compare32(cond, left, right, dest); 242635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 243635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 244635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void storePtr(RegisterID src, ImplicitAddress address) 245635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 246635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project store32(src, address); 247635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 248635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 249635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void storePtr(RegisterID src, BaseIndex address) 250635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 251635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project store32(src, address); 252635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 253635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void storePtr(RegisterID src, void* address) 2555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian { 2565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian store32(src, address); 2575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 2585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2592bde8e466a4451c7319e3a072d118917957d6554Steve Block void storePtr(TrustedImmPtr imm, ImplicitAddress address) 260635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2612bde8e466a4451c7319e3a072d118917957d6554Steve Block store32(TrustedImm32(imm), address); 262635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2642bde8e466a4451c7319e3a072d118917957d6554Steve Block void storePtr(TrustedImmPtr imm, void* address) 265635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2662bde8e466a4451c7319e3a072d118917957d6554Steve Block store32(TrustedImm32(imm), address); 267635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian DataLabel32 storePtrWithAddressOffsetPatch(RegisterID src, Address address) 270635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return store32WithAddressOffsetPatch(src, address); 272635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 273635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 274635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Jump branchPtr(Condition cond, RegisterID left, RegisterID right) 276635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branch32(cond, left, right); 278635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 279635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2802bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchPtr(Condition cond, RegisterID left, TrustedImmPtr right) 281635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2822bde8e466a4451c7319e3a072d118917957d6554Steve Block return branch32(cond, left, TrustedImm32(right)); 283635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 284635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Jump branchPtr(Condition cond, RegisterID left, Address right) 286635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branch32(cond, left, right); 288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 289635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Jump branchPtr(Condition cond, Address left, RegisterID right) 291635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branch32(cond, left, right); 293635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 294635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Jump branchPtr(Condition cond, AbsoluteAddress left, RegisterID right) 296635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 2978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branch32(cond, left, right); 298635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 299635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3002bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchPtr(Condition cond, Address left, TrustedImmPtr right) 301635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3022bde8e466a4451c7319e3a072d118917957d6554Steve Block return branch32(cond, left, TrustedImm32(right)); 303635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 304635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3052bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchPtr(Condition cond, AbsoluteAddress left, TrustedImmPtr right) 306635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3072bde8e466a4451c7319e3a072d118917957d6554Steve Block return branch32(cond, left, TrustedImm32(right)); 308635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 309635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Jump branchTestPtr(Condition cond, RegisterID reg, RegisterID mask) 311635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branchTest32(cond, reg, mask); 313635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 314635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3152bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchTestPtr(Condition cond, RegisterID reg, TrustedImm32 mask = TrustedImm32(-1)) 316635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branchTest32(cond, reg, mask); 318635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 319635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3202bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchTestPtr(Condition cond, Address address, TrustedImm32 mask = TrustedImm32(-1)) 321635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branchTest32(cond, address, mask); 323635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 324635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3252bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchTestPtr(Condition cond, BaseIndex address, TrustedImm32 mask = TrustedImm32(-1)) 326635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branchTest32(cond, address, mask); 328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 329635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 330635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Jump branchAddPtr(Condition cond, RegisterID src, RegisterID dest) 332635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branchAdd32(cond, src, dest); 334635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 335635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3362bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchSubPtr(Condition cond, TrustedImm32 imm, RegisterID dest) 337635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 3388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return branchSub32(cond, imm, dest); 339635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block using MacroAssemblerBase::branchTest8; 3412bde8e466a4451c7319e3a072d118917957d6554Steve Block Jump branchTest8(Condition cond, ExtendedAddress address, TrustedImm32 mask = TrustedImm32(-1)) 342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return MacroAssemblerBase::branchTest8(cond, Address(address.base, address.offset), mask); 344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 345635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 346635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 347635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}; 348635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 349635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace JSC 350635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 351635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif // ENABLE(ASSEMBLER) 352635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 353635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif // MacroAssembler_h 354