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

Unified Diff: src/IceAssemblerX86Base.h

Issue 1559243002: Suzero. X8664. NaCl Sandboxing. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fixes filetype=asm; addresses comments. Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceAssembler.h ('k') | src/IceAssemblerX86BaseImpl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceAssemblerX86Base.h
diff --git a/src/IceAssemblerX86Base.h b/src/IceAssemblerX86Base.h
index 9da66a3fc2c0548caf518b8e01c6140ac12173a6..3af54e316c04a9f10a4c2a193e624b353034f7a2 100644
--- a/src/IceAssemblerX86Base.h
+++ b/src/IceAssemblerX86Base.h
@@ -44,11 +44,10 @@ class AssemblerX86Base : public ::Ice::Assembler {
AssemblerX86Base &operator=(const AssemblerX86Base &) = delete;
protected:
- explicit AssemblerX86Base(bool use_far_branches = false)
- : Assembler(Traits::AsmKind) {
- // This mode is only needed and implemented for MIPS and ARM.
- assert(!use_far_branches);
- (void)use_far_branches;
+ explicit AssemblerX86Base(bool EmitAddrSizeOverridePrefix = Traits::Is64Bit)
+ : Assembler(Traits::AsmKind),
+ EmitAddrSizeOverridePrefix(EmitAddrSizeOverridePrefix) {
+ assert(Traits::Is64Bit || !EmitAddrSizeOverridePrefix);
}
public:
@@ -288,6 +287,8 @@ public:
static const intptr_t kCallExternalLabelSize = 5;
void pushl(GPRRegister reg);
+ void pushl(const Immediate &Imm);
+ void pushl(const ConstantRelocatable *Label);
void popl(GPRRegister reg);
void popl(const Address &address);
@@ -711,6 +712,11 @@ protected:
private:
ENABLE_MAKE_UNIQUE;
+ // EmidAddrSizeOverridePrefix directs the emission of the 0x67 prefix to
+ // force 32-bit registers when accessing memory. This is only used in native
+ // 64-bit.
+ const bool EmitAddrSizeOverridePrefix;
+
static constexpr Type RexTypeIrrelevant = IceType_i32;
static constexpr Type RexTypeForceRexW = IceType_i64;
static constexpr GPRRegister RexRegIrrelevant =
@@ -746,7 +752,7 @@ private:
Label *getOrCreateLabel(SizeT Number, LabelVector &Labels);
void emitAddrSizeOverridePrefix() {
- if (!Traits::Is64Bit) {
+ if (!Traits::Is64Bit || !EmitAddrSizeOverridePrefix) {
return;
}
static constexpr uint8_t AddrSizeOverridePrefix = 0x67;
« no previous file with comments | « src/IceAssembler.h ('k') | src/IceAssemblerX86BaseImpl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698