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

Side by Side Diff: src/IceAssemblerX86BaseImpl.h

Issue 1506653002: Subzero: Add Non-SFI support for x86-32. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes 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 unified diff | Download patch
« no previous file with comments | « src/IceAssemblerX86Base.h ('k') | src/IceClFlags.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 //===- subzero/src/IceAssemblerX86BaseImpl.h - base x86 assembler -*- C++ -*-=// 1 //===- subzero/src/IceAssemblerX86BaseImpl.h - base x86 assembler -*- C++ -*-=//
2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
3 // for details. All rights reserved. Use of this source code is governed by a 3 // for details. All rights reserved. Use of this source code is governed by a
4 // BSD-style license that can be found in the LICENSE file. 4 // BSD-style license that can be found in the LICENSE file.
5 // 5 //
6 // Modified by the Subzero authors. 6 // Modified by the Subzero authors.
7 // 7 //
8 //===----------------------------------------------------------------------===// 8 //===----------------------------------------------------------------------===//
9 // 9 //
10 // The Subzero Code Generator 10 // The Subzero Code Generator
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 emitRex(RexTypeIrrelevant, address, RexRegIrrelevant); 120 emitRex(RexTypeIrrelevant, address, RexRegIrrelevant);
121 emitUint8(0xFF); 121 emitUint8(0xFF);
122 emitOperand(2, address); 122 emitOperand(2, address);
123 } 123 }
124 124
125 template <typename TraitsType> 125 template <typename TraitsType>
126 void AssemblerX86Base<TraitsType>::call(const ConstantRelocatable *label) { 126 void AssemblerX86Base<TraitsType>::call(const ConstantRelocatable *label) {
127 AssemblerBuffer::EnsureCapacity ensured(&Buffer); 127 AssemblerBuffer::EnsureCapacity ensured(&Buffer);
128 intptr_t call_start = Buffer.getPosition(); 128 intptr_t call_start = Buffer.getPosition();
129 emitUint8(0xE8); 129 emitUint8(0xE8);
130 emitFixup(this->createFixup(Traits::PcRelFixup, label)); 130 emitFixup(this->createFixup(Traits::FK_PcRel, label));
131 emitInt32(-4); 131 emitInt32(-4);
132 assert((Buffer.getPosition() - call_start) == kCallExternalLabelSize); 132 assert((Buffer.getPosition() - call_start) == kCallExternalLabelSize);
133 (void)call_start; 133 (void)call_start;
134 } 134 }
135 135
136 template <typename TraitsType> 136 template <typename TraitsType>
137 void AssemblerX86Base<TraitsType>::call(const Immediate &abs_address) { 137 void AssemblerX86Base<TraitsType>::call(const Immediate &abs_address) {
138 AssemblerBuffer::EnsureCapacity ensured(&Buffer); 138 AssemblerBuffer::EnsureCapacity ensured(&Buffer);
139 intptr_t call_start = Buffer.getPosition(); 139 intptr_t call_start = Buffer.getPosition();
140 emitUint8(0xE8); 140 emitUint8(0xE8);
141 emitFixup(this->createFixup(Traits::PcRelFixup, AssemblerFixup::NullSymbol)); 141 emitFixup(this->createFixup(Traits::FK_PcRel, AssemblerFixup::NullSymbol));
142 emitInt32(abs_address.value() - 4); 142 emitInt32(abs_address.value() - 4);
143 assert((Buffer.getPosition() - call_start) == kCallExternalLabelSize); 143 assert((Buffer.getPosition() - call_start) == kCallExternalLabelSize);
144 (void)call_start; 144 (void)call_start;
145 } 145 }
146 146
147 template <typename TraitsType> 147 template <typename TraitsType>
148 void AssemblerX86Base<TraitsType>::pushl(GPRRegister reg) { 148 void AssemblerX86Base<TraitsType>::pushl(GPRRegister reg) {
149 AssemblerBuffer::EnsureCapacity ensured(&Buffer); 149 AssemblerBuffer::EnsureCapacity ensured(&Buffer);
150 emitRexB(RexTypeIrrelevant, reg); 150 emitRexB(RexTypeIrrelevant, reg);
151 emitUint8(0x50 + gprEncoding(reg)); 151 emitUint8(0x50 + gprEncoding(reg));
(...skipping 2939 matching lines...) Expand 10 before | Expand all | Expand 10 after
3091 } else { 3091 } else {
3092 emitUint8(0x0F); 3092 emitUint8(0x0F);
3093 emitUint8(0x80 + condition); 3093 emitUint8(0x80 + condition);
3094 emitLabelLink(label); 3094 emitLabelLink(label);
3095 } 3095 }
3096 } 3096 }
3097 3097
3098 template <typename TraitsType> 3098 template <typename TraitsType>
3099 void AssemblerX86Base<TraitsType>::j(BrCond condition, 3099 void AssemblerX86Base<TraitsType>::j(BrCond condition,
3100 const ConstantRelocatable *label) { 3100 const ConstantRelocatable *label) {
3101 llvm::report_fatal_error("Untested - please verify and then reenable.");
3101 AssemblerBuffer::EnsureCapacity ensured(&Buffer); 3102 AssemblerBuffer::EnsureCapacity ensured(&Buffer);
3102 emitUint8(0x0F); 3103 emitUint8(0x0F);
3103 emitUint8(0x80 + condition); 3104 emitUint8(0x80 + condition);
3104 emitFixup(this->createFixup(Traits::PcRelFixup, label)); 3105 emitFixup(this->createFixup(Traits::FK_PcRel, label));
3105 emitInt32(-4); 3106 emitInt32(-4);
3106 } 3107 }
3107 3108
3108 template <typename TraitsType> 3109 template <typename TraitsType>
3109 void AssemblerX86Base<TraitsType>::jmp(GPRRegister reg) { 3110 void AssemblerX86Base<TraitsType>::jmp(GPRRegister reg) {
3110 AssemblerBuffer::EnsureCapacity ensured(&Buffer); 3111 AssemblerBuffer::EnsureCapacity ensured(&Buffer);
3111 emitRexB(RexTypeIrrelevant, reg); 3112 emitRexB(RexTypeIrrelevant, reg);
3112 emitUint8(0xFF); 3113 emitUint8(0xFF);
3113 emitRegisterOperand(4, gprEncoding(reg)); 3114 emitRegisterOperand(4, gprEncoding(reg));
3114 } 3115 }
(...skipping 17 matching lines...) Expand all
3132 emitUint8(0xEB); 3133 emitUint8(0xEB);
3133 emitNearLabelLink(label); 3134 emitNearLabelLink(label);
3134 } else { 3135 } else {
3135 emitUint8(0xE9); 3136 emitUint8(0xE9);
3136 emitLabelLink(label); 3137 emitLabelLink(label);
3137 } 3138 }
3138 } 3139 }
3139 3140
3140 template <typename TraitsType> 3141 template <typename TraitsType>
3141 void AssemblerX86Base<TraitsType>::jmp(const ConstantRelocatable *label) { 3142 void AssemblerX86Base<TraitsType>::jmp(const ConstantRelocatable *label) {
3143 llvm::report_fatal_error("Untested - please verify and then reenable.");
3142 AssemblerBuffer::EnsureCapacity ensured(&Buffer); 3144 AssemblerBuffer::EnsureCapacity ensured(&Buffer);
3143 emitUint8(0xE9); 3145 emitUint8(0xE9);
3144 emitFixup(this->createFixup(Traits::PcRelFixup, label)); 3146 emitFixup(this->createFixup(Traits::FK_PcRel, label));
3145 emitInt32(-4); 3147 emitInt32(-4);
3146 } 3148 }
3147 3149
3148 template <typename TraitsType> void AssemblerX86Base<TraitsType>::mfence() { 3150 template <typename TraitsType> void AssemblerX86Base<TraitsType>::mfence() {
3149 AssemblerBuffer::EnsureCapacity ensured(&Buffer); 3151 AssemblerBuffer::EnsureCapacity ensured(&Buffer);
3150 emitUint8(0x0F); 3152 emitUint8(0x0F);
3151 emitUint8(0xAE); 3153 emitUint8(0xAE);
3152 emitUint8(0xF0); 3154 emitUint8(0xF0);
3153 } 3155 }
3154 3156
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
3460 (void)shifter; 3462 (void)shifter;
3461 if (Ty == IceType_i16) 3463 if (Ty == IceType_i16)
3462 emitOperandSizeOverride(); 3464 emitOperandSizeOverride();
3463 emitRexB(Ty, operand.rm()); 3465 emitRexB(Ty, operand.rm());
3464 emitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); 3466 emitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3);
3465 emitOperand(rm, operand); 3467 emitOperand(rm, operand);
3466 } 3468 }
3467 3469
3468 } // end of namespace X86NAMESPACE 3470 } // end of namespace X86NAMESPACE
3469 } // end of namespace Ice 3471 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/IceAssemblerX86Base.h ('k') | src/IceClFlags.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698