LLVM API Documentation

MipsABIFlagsSection.cpp
Go to the documentation of this file.
00001 //===-- MipsABIFlagsSection.cpp - Mips ELF ABI Flags Section ---*- C++ -*--===//
00002 //
00003 //                     The LLVM Compiler Infrastructure
00004 //
00005 // This file is distributed under the University of Illinois Open Source
00006 // License. See LICENSE.TXT for details.
00007 //
00008 //===----------------------------------------------------------------------===//
00009 
00010 #include "MipsABIFlagsSection.h"
00011 
00012 using namespace llvm;
00013 
00014 uint8_t MipsABIFlagsSection::getFpABIValue() {
00015   switch (FpABI) {
00016   case FpABIKind::ANY:
00017     return Val_GNU_MIPS_ABI_FP_ANY;
00018   case FpABIKind::XX:
00019     return Val_GNU_MIPS_ABI_FP_XX;
00020   case FpABIKind::S32:
00021     return Val_GNU_MIPS_ABI_FP_DOUBLE;
00022   case FpABIKind::S64:
00023     if (Is32BitABI)
00024       return OddSPReg ? Val_GNU_MIPS_ABI_FP_64 : Val_GNU_MIPS_ABI_FP_64A;
00025     return Val_GNU_MIPS_ABI_FP_DOUBLE;
00026   }
00027 
00028   llvm_unreachable("unexpected fp abi value");
00029 }
00030 
00031 StringRef MipsABIFlagsSection::getFpABIString(FpABIKind Value) {
00032   switch (Value) {
00033   case FpABIKind::XX:
00034     return "xx";
00035   case FpABIKind::S32:
00036     return "32";
00037   case FpABIKind::S64:
00038     return "64";
00039   default:
00040     llvm_unreachable("unsupported fp abi value");
00041   }
00042 }
00043 
00044 uint8_t MipsABIFlagsSection::getCPR1SizeValue() {
00045   if (FpABI == FpABIKind::XX)
00046     return (uint8_t)AFL_REG_32;
00047   return (uint8_t)CPR1Size;
00048 }
00049 
00050 namespace llvm {
00051 MCStreamer &operator<<(MCStreamer &OS, MipsABIFlagsSection &ABIFlagsSection) {
00052   // Write out a Elf_Internal_ABIFlags_v0 struct
00053   OS.EmitIntValue(ABIFlagsSection.getVersionValue(), 2);         // version
00054   OS.EmitIntValue(ABIFlagsSection.getISALevelValue(), 1);        // isa_level
00055   OS.EmitIntValue(ABIFlagsSection.getISARevisionValue(), 1);     // isa_rev
00056   OS.EmitIntValue(ABIFlagsSection.getGPRSizeValue(), 1);         // gpr_size
00057   OS.EmitIntValue(ABIFlagsSection.getCPR1SizeValue(), 1);        // cpr1_size
00058   OS.EmitIntValue(ABIFlagsSection.getCPR2SizeValue(), 1);        // cpr2_size
00059   OS.EmitIntValue(ABIFlagsSection.getFpABIValue(), 1);           // fp_abi
00060   OS.EmitIntValue(ABIFlagsSection.getISAExtensionSetValue(), 4); // isa_ext
00061   OS.EmitIntValue(ABIFlagsSection.getASESetValue(), 4);          // ases
00062   OS.EmitIntValue(ABIFlagsSection.getFlags1Value(), 4);          // flags1
00063   OS.EmitIntValue(ABIFlagsSection.getFlags2Value(), 4);          // flags2
00064   return OS;
00065 }
00066 }