17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved. 27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file. 47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#ifndef V8_COMPILER_X64_INSTRUCTION_CODES_X64_H_ 67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define V8_COMPILER_X64_INSTRUCTION_CODES_X64_H_ 77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace v8 { 97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace internal { 107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace compiler { 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// X64-specific opcodes that specify which assembly sequence to emit. 137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Most opcodes specify a single instruction. 147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define TARGET_ARCH_OPCODE_LIST(V) \ 157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Add) \ 167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Add32) \ 177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64And) \ 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64And32) \ 197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Cmp) \ 207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Cmp32) \ 217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Test) \ 227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Test32) \ 237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Or) \ 247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Or32) \ 257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Xor) \ 267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Xor32) \ 277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Sub) \ 287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Sub32) \ 297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Imul) \ 307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Imul32) \ 317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Idiv) \ 327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Idiv32) \ 337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Udiv) \ 347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Udiv32) \ 357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Not) \ 367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Not32) \ 377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Neg) \ 387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Neg32) \ 397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Shl) \ 407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Shl32) \ 417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Shr) \ 427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Shr32) \ 437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Sar) \ 447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64Sar32) \ 455e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org V(X64Ror) \ 465e57059e20217fd540b60c237d326414afe2171emachenbach@chromium.org V(X64Ror32) \ 477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64Cmp) \ 487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64Add) \ 497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64Sub) \ 507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64Mul) \ 517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64Div) \ 527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64Mod) \ 53b4ef18e93b120b995e067ba72707b62a448eeed6machenbach@chromium.org V(SSEFloat64Sqrt) \ 547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64ToInt32) \ 557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEFloat64ToUint32) \ 567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEInt32ToFloat64) \ 577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(SSEUint32ToFloat64) \ 586474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movsxbl) \ 596474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movzxbl) \ 606474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movb) \ 616474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movsxwl) \ 626474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movzxwl) \ 636474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movw) \ 646474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movl) \ 656474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movsxlq) \ 666474a1cfee1cdad45de5cc96960085e1c7daf11cmachenbach@chromium.org V(X64Movq) \ 67fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org V(X64Movsd) \ 68fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org V(X64Movss) \ 697b6dc58d68c4315b99f5ec3faf6927db3d0db913machenbach@chromium.org V(X64Push) \ 707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(X64StoreWriteBarrier) 717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Addressing modes represent the "shape" of inputs to an instruction. 747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Many instructions support multiple addressing modes. Addressing modes 757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// are encoded into the InstructionCode of the instruction and tell the 767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// code generator after register allocation which assembler method to call. 777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// 787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// We use the following local notation for addressing modes: 797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// 807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// R = register 817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// O = register or stack slot 827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// D = double register 837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// I = immediate (handle, external, int32) 847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// MR = [register] 857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// MI = [immediate] 867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// MRN = [register + register * N in {1, 2, 4, 8}] 877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// MRI = [register + immediate] 887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// MRNI = [register + register * N in {1, 2, 4, 8} + immediate] 897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define TARGET_ADDRESSING_MODE_LIST(V) \ 907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(MR) /* [%r1] */ \ 917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(MRI) /* [%r1 + K] */ \ 927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(MR1I) /* [%r1 + %r2 + K] */ \ 937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(MR2I) /* [%r1 + %r2*2 + K] */ \ 947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(MR4I) /* [%r1 + %r2*4 + K] */ \ 957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org V(MR8I) /* [%r1 + %r2*8 + K] */ 967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace compiler 987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace internal 997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} // namespace v8 1007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif // V8_COMPILER_X64_INSTRUCTION_CODES_X64_H_ 102