blob: da1479c8e53008c02eec16140c89ad02fd92baed [file] [log] [blame]
Rafael Espindola7bc59bc2006-05-14 22:18:28 +00001//===- ARMInstrInfo.cpp - ARM Instruction Information -----------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by the "Instituto Nokia de Tecnologia" and
6// is distributed under the University of Illinois Open Source
7// License. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10//
11// This file contains the ARM implementation of the TargetInstrInfo class.
12//
13//===----------------------------------------------------------------------===//
14
15#include "ARMInstrInfo.h"
16#include "ARM.h"
17#include "llvm/CodeGen/MachineInstrBuilder.h"
18#include "ARMGenInstrInfo.inc"
19using namespace llvm;
20
21ARMInstrInfo::ARMInstrInfo()
22 : TargetInstrInfo(ARMInsts, sizeof(ARMInsts)/sizeof(ARMInsts[0])) {
23}
24
Rafael Espindola46adf812006-08-08 20:35:03 +000025const TargetRegisterClass *ARMInstrInfo::getPointerRegClass() const {
26 return &ARM::IntRegsRegClass;
27}
28
Rafael Espindola7bc59bc2006-05-14 22:18:28 +000029/// Return true if the instruction is a register to register move and
30/// leave the source and dest operands in the passed parameters.
31///
32bool ARMInstrInfo::isMoveInstr(const MachineInstr &MI,
33 unsigned &SrcReg, unsigned &DstReg) const {
Rafael Espindola49e44152006-06-27 21:52:45 +000034 MachineOpCode oc = MI.getOpcode();
35 switch (oc) {
Rafael Espindola7cca7c52006-09-11 17:25:40 +000036 case ARM::MOV:
Rafael Espindola49e44152006-06-27 21:52:45 +000037 assert(MI.getNumOperands() == 2 &&
38 MI.getOperand(0).isRegister() &&
Rafael Espindola49e44152006-06-27 21:52:45 +000039 "Invalid ARM MOV instruction");
Rafael Espindola7cca7c52006-09-11 17:25:40 +000040 if (MI.getOperand(1).isRegister()) {
41 SrcReg = MI.getOperand(1).getReg();
42 DstReg = MI.getOperand(0).getReg();
43 return true;
44 }
Rafael Espindola49e44152006-06-27 21:52:45 +000045 }
Rafael Espindola7cca7c52006-09-11 17:25:40 +000046 return false;
Rafael Espindola7bc59bc2006-05-14 22:18:28 +000047}