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