1 //===-- CSKYAsmBackend.cpp - CSKY Assembler Backend -----------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "CSKYAsmBackend.h" 10 #include "MCTargetDesc/CSKYMCTargetDesc.h" 11 #include "llvm/MC/MCAsmLayout.h" 12 #include "llvm/MC/MCAssembler.h" 13 #include "llvm/MC/MCContext.h" 14 #include "llvm/MC/MCFixupKindInfo.h" 15 #include "llvm/MC/MCObjectWriter.h" 16 #include "llvm/Support/Debug.h" 17 18 #define DEBUG_TYPE "csky-asmbackend" 19 20 using namespace llvm; 21 22 std::unique_ptr<MCObjectTargetWriter> 23 CSKYAsmBackend::createObjectTargetWriter() const { 24 return createCSKYELFObjectWriter(); 25 } 26 27 unsigned int CSKYAsmBackend::getNumFixupKinds() const { return 1; } 28 29 void CSKYAsmBackend::applyFixup(const MCAssembler &Asm, const MCFixup &Fixup, 30 const MCValue &Target, 31 MutableArrayRef<char> Data, uint64_t Value, 32 bool IsResolved, 33 const MCSubtargetInfo *STI) const { 34 return; 35 } 36 37 bool CSKYAsmBackend::fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value, 38 const MCRelaxableFragment *DF, 39 const MCAsmLayout &Layout) const { 40 return false; 41 } 42 43 void CSKYAsmBackend::relaxInstruction(MCInst &Inst, 44 const MCSubtargetInfo &STI) const { 45 llvm_unreachable("CSKYAsmBackend::relaxInstruction() unimplemented"); 46 } 47 48 bool CSKYAsmBackend::writeNopData(raw_ostream &OS, uint64_t Count) const { 49 if (Count % 2) 50 return false; 51 52 // MOV32 r0, r0 53 while (Count >= 4) { 54 OS.write("\xc4\x00\x48\x20", 4); 55 Count -= 4; 56 } 57 // MOV16 r0, r0 58 if (Count) 59 OS.write("\x6c\x03", 2); 60 61 return true; 62 } 63 64 MCAsmBackend *llvm::createCSKYAsmBackend(const Target &T, 65 const MCSubtargetInfo &STI, 66 const MCRegisterInfo &MRI, 67 const MCTargetOptions &Options) { 68 return new CSKYAsmBackend(STI, Options); 69 } 70