| Rafael Espindola | ffdc24b | 2006-05-14 22:18:28 +0000 | [diff] [blame] | 1 | //===- ARMInstrInfo.cpp - ARM Instruction Information -----------*- C++ -*-===// | 
|  | 2 | // | 
|  | 3 | //                     The LLVM Compiler Infrastructure | 
|  | 4 | // | 
| Chris Lattner | f3ebc3f | 2007-12-29 20:36:04 +0000 | [diff] [blame] | 5 | // This file is distributed under the University of Illinois Open Source | 
| Rafael Espindola | ffdc24b | 2006-05-14 22:18:28 +0000 | [diff] [blame] | 6 | // License. See LICENSE.TXT for details. | 
|  | 7 | // | 
|  | 8 | //===----------------------------------------------------------------------===// | 
|  | 9 | // | 
|  | 10 | // This file contains the ARM implementation of the TargetInstrInfo class. | 
|  | 11 | // | 
|  | 12 | //===----------------------------------------------------------------------===// | 
|  | 13 |  | 
|  | 14 | #include "ARMInstrInfo.h" | 
|  | 15 | #include "ARM.h" | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 16 | #include "ARMAddressingModes.h" | 
| Rafael Espindola | ffdc24b | 2006-05-14 22:18:28 +0000 | [diff] [blame] | 17 | #include "ARMGenInstrInfo.inc" | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 18 | #include "ARMMachineFunctionInfo.h" | 
| Owen Anderson | e2f23a3 | 2007-09-07 04:06:50 +0000 | [diff] [blame] | 19 | #include "llvm/ADT/STLExtras.h" | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 20 | #include "llvm/CodeGen/LiveVariables.h" | 
| Owen Anderson | 6bb0c52 | 2008-01-04 23:57:37 +0000 | [diff] [blame] | 21 | #include "llvm/CodeGen/MachineFrameInfo.h" | 
| Evan Cheng | 760c68b | 2007-01-29 23:45:17 +0000 | [diff] [blame] | 22 | #include "llvm/CodeGen/MachineInstrBuilder.h" | 
|  | 23 | #include "llvm/CodeGen/MachineJumpTableInfo.h" | 
| Chris Lattner | 7b26fce | 2009-08-22 20:48:53 +0000 | [diff] [blame] | 24 | #include "llvm/MC/MCAsmInfo.h" | 
| Rafael Espindola | ffdc24b | 2006-05-14 22:18:28 +0000 | [diff] [blame] | 25 | using namespace llvm; | 
|  | 26 |  | 
| Anton Korobeynikov | 99152f3 | 2009-06-26 21:28:53 +0000 | [diff] [blame] | 27 | ARMInstrInfo::ARMInstrInfo(const ARMSubtarget &STI) | 
| Anton Korobeynikov | 14635da | 2009-11-02 00:10:38 +0000 | [diff] [blame] | 28 | : ARMBaseInstrInfo(STI), RI(*this, STI) { | 
| Anton Korobeynikov | 99152f3 | 2009-06-26 21:28:53 +0000 | [diff] [blame] | 29 | } | 
| Rafael Espindola | 8c41f99 | 2006-08-08 20:35:03 +0000 | [diff] [blame] | 30 |  | 
| Chris Lattner | e98a3c3 | 2009-08-02 05:20:37 +0000 | [diff] [blame] | 31 | unsigned ARMInstrInfo::getUnindexedOpcode(unsigned Opc) const { | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 32 | switch (Opc) { | 
|  | 33 | default: break; | 
|  | 34 | case ARM::LDR_PRE: | 
|  | 35 | case ARM::LDR_POST: | 
| Jim Grosbach | 1e4d9a1 | 2010-10-26 22:37:02 +0000 | [diff] [blame] | 36 | return ARM::LDRi12; | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 37 | case ARM::LDRH_PRE: | 
|  | 38 | case ARM::LDRH_POST: | 
|  | 39 | return ARM::LDRH; | 
|  | 40 | case ARM::LDRB_PRE: | 
|  | 41 | case ARM::LDRB_POST: | 
| Jim Grosbach | 5a7c715 | 2010-10-27 00:19:44 +0000 | [diff] [blame] | 42 | return ARM::LDRBi12; | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 43 | case ARM::LDRSH_PRE: | 
|  | 44 | case ARM::LDRSH_POST: | 
|  | 45 | return ARM::LDRSH; | 
|  | 46 | case ARM::LDRSB_PRE: | 
|  | 47 | case ARM::LDRSB_POST: | 
|  | 48 | return ARM::LDRSB; | 
|  | 49 | case ARM::STR_PRE: | 
|  | 50 | case ARM::STR_POST: | 
| Jim Grosbach | 338de3e | 2010-10-27 23:12:14 +0000 | [diff] [blame] | 51 | return ARM::STRi12; | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 52 | case ARM::STRH_PRE: | 
|  | 53 | case ARM::STRH_POST: | 
|  | 54 | return ARM::STRH; | 
|  | 55 | case ARM::STRB_PRE: | 
|  | 56 | case ARM::STRB_POST: | 
| Jim Grosbach | 338de3e | 2010-10-27 23:12:14 +0000 | [diff] [blame] | 57 | return ARM::STRBi12; | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 58 | } | 
| David Goodwin | af7451b | 2009-07-08 16:09:28 +0000 | [diff] [blame] | 59 |  | 
| Evan Cheng | 10043e2 | 2007-01-19 07:51:42 +0000 | [diff] [blame] | 60 | return 0; | 
|  | 61 | } |