//===-- ARMAsmPrinter.cpp - ARM LLVM assembly writer ----------------------===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This file contains a printer that converts from our internal representation// of machine-dependent LLVM code to GAS-format ARM assembly language.////===----------------------------------------------------------------------===//#define DEBUG_TYPE "asm-printer"#include"ARM.h"#include"ARMBuildAttrs.h"#include"ARMTargetMachine.h"#include"ARMAddressingModes.h"#include"ARMConstantPoolValue.h"#include"ARMMachineFunctionInfo.h"#include"llvm/Constants.h"#include"llvm/Module.h"#include"llvm/CodeGen/AsmPrinter.h"#include"llvm/CodeGen/DwarfWriter.h"#include"llvm/CodeGen/MachineModuleInfo.h"#include"llvm/CodeGen/MachineFunctionPass.h"#include"llvm/CodeGen/MachineJumpTableInfo.h"#include"llvm/MC/MCSection.h"#include"llvm/Target/TargetAsmInfo.h"#include"llvm/Target/TargetData.h"#include"llvm/Target/TargetLoweringObjectFile.h"#include"llvm/Target/TargetMachine.h"#include"llvm/Target/TargetOptions.h"#include"llvm/Target/TargetRegistry.h"#include"llvm/ADT/SmallPtrSet.h"#include"llvm/ADT/Statistic.h"#include"llvm/ADT/StringSet.h"#include"llvm/Support/Compiler.h"#include"llvm/Support/ErrorHandling.h"#include"llvm/Support/Mangler.h"#include"llvm/Support/MathExtras.h"#include"llvm/Support/FormattedStream.h"#include<cctype>usingnamespacellvm;STATISTIC(EmittedInsts,"Number of machine instrs printed");namespace{classVISIBILITY_HIDDENARMAsmPrinter:publicAsmPrinter{DwarfWriter*DW;/// Subtarget - Keep a pointer to the ARMSubtarget around so that we can/// make the right decision when printing asm code for different targets.constARMSubtarget*Subtarget;/// AFI - Keep a pointer to ARMFunctionInfo for the current/// MachineFunction.ARMFunctionInfo*AFI;/// MCP - Keep a pointer to constantpool entries of the current/// MachineFunction.constMachineConstantPool*MCP;/// We name each basic block in a Function with a unique number, so/// that we can consistently refer to them later. This is cleared/// at the beginning of each call to runOnMachineFunction().///typedefstd::map<constValue*,