LLVM 19.0.0git
Namespaces | Enumerations | Functions
llvm::AVR Namespace Reference

Contains the AVR backend. More...

Namespaces

namespace  fixups
 

Enumerations

enum  AddressSpace {
  DataMemory , ProgramMemory , ProgramMemory1 , ProgramMemory2 ,
  ProgramMemory3 , ProgramMemory4 , ProgramMemory5 , NumAddrSpaces
}
 An integer that identifies all of the supported AVR address spaces. More...
 
enum  Fixups {
  fixup_32 = FirstTargetFixupKind , fixup_7_pcrel , fixup_13_pcrel , fixup_16 ,
  fixup_16_pm , fixup_ldi , fixup_lo8_ldi , fixup_hi8_ldi ,
  fixup_hh8_ldi , fixup_ms8_ldi , fixup_lo8_ldi_neg , fixup_hi8_ldi_neg ,
  fixup_hh8_ldi_neg , fixup_ms8_ldi_neg , fixup_lo8_ldi_pm , fixup_hi8_ldi_pm ,
  fixup_hh8_ldi_pm , fixup_lo8_ldi_pm_neg , fixup_hi8_ldi_pm_neg , fixup_hh8_ldi_pm_neg ,
  fixup_call , fixup_6 , fixup_6_adiw , fixup_lo8_ldi_gs ,
  fixup_hi8_ldi_gs , fixup_8 , fixup_8_lo8 , fixup_8_hi8 ,
  fixup_8_hlo8 , fixup_diff8 , fixup_diff16 , fixup_diff32 ,
  fixup_lds_sts_16 , fixup_port6 , fixup_port5 , LastTargetFixupKind ,
  NumTargetFixupKinds = LastTargetFixupKind - FirstTargetFixupKind
}
 The set of supported fixups. More...
 

Functions

template<typename T >
bool isProgramMemoryAddress (T *V)
 Checks if a given type is a pointer to program memory.
 
template<typename T >
AddressSpace getAddressSpace (T *V)
 
bool isProgramMemoryAccess (MemSDNode const *N)
 
int getProgramMemoryBank (MemSDNode const *N)
 

Detailed Description

Contains the AVR backend.

Enumeration Type Documentation

◆ AddressSpace

An integer that identifies all of the supported AVR address spaces.

Enumerator
DataMemory 
ProgramMemory 
ProgramMemory1 
ProgramMemory2 
ProgramMemory3 
ProgramMemory4 
ProgramMemory5 
NumAddrSpaces 

Definition at line 42 of file AVR.h.

◆ Fixups

The set of supported fixups.

Although most of the current fixup types reflect a unique relocation one can have multiple fixup types for a given relocation and thus need to be uniquely named.

Note
This table must be in the same order of MCFixupKindInfo Infos[AVR::NumTargetFixupKinds] in AVRAsmBackend.cpp.
Enumerator
fixup_32 

A 32-bit AVR fixup.

fixup_7_pcrel 

A 7-bit PC-relative fixup for the family of conditional branches which take 7-bit targets (BRNE,BRGT,etc).

fixup_13_pcrel 

A 12-bit PC-relative fixup for the family of branches which take 12-bit targets (RJMP,RCALL,etc).

Note
Although the fixup is labelled as 13 bits, it is actually only encoded in 12. The reason for The nonmenclature is that AVR branch targets are rightshifted by 1, because instructions are always aligned to 2 bytes, so the 0'th bit is always 0. This way there is 13-bits of precision.
fixup_16 

A 16-bit address.

fixup_16_pm 

A 16-bit program memory address.

fixup_ldi 

Replaces the 8-bit immediate with another value.

fixup_lo8_ldi 

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a 16-bit value (bits 0-7).

fixup_hi8_ldi 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 16-bit value (bits 8-15).

fixup_hh8_ldi 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 24-bit value (bits 16-23).

fixup_ms8_ldi 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 32-bit value (bits 24-31).

fixup_lo8_ldi_neg 

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a negated 16-bit value (bits 0-7).

fixup_hi8_ldi_neg 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 16-bit value (bits 8-15).

fixup_hh8_ldi_neg 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 24-bit value (bits 16-23).

fixup_ms8_ldi_neg 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 32-bit value (bits 24-31).

fixup_lo8_ldi_pm 

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a 16-bit program memory address value (bits 0-7).

fixup_hi8_ldi_pm 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 16-bit program memory address value (bits 8-15).

fixup_hh8_ldi_pm 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a 24-bit program memory address value (bits 16-23).

fixup_lo8_ldi_pm_neg 

Replaces the immediate operand of a 16-bit Rd, K instruction with the lower 8 bits of a negated 16-bit program memory address value (bits 0-7).

fixup_hi8_ldi_pm_neg 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 16-bit program memory address value (bits 8-15).

fixup_hh8_ldi_pm_neg 

Replaces the immediate operand of a 16-bit Rd, K instruction with the upper 8 bits of a negated 24-bit program memory address value (bits 16-23).

fixup_call 

A 22-bit fixup for the target of a CALL k or JMP k instruction.

fixup_6 
fixup_6_adiw 

A symbol+addr fixup for the `LDD <x>+<n>, <r>" family of instructions.

fixup_lo8_ldi_gs 
fixup_hi8_ldi_gs 
fixup_8 
fixup_8_lo8 
fixup_8_hi8 
fixup_8_hlo8 
fixup_diff8 
fixup_diff16 
fixup_diff32 
fixup_lds_sts_16 
fixup_port6 

A 6-bit port address.

fixup_port5 

A 5-bit port address.

LastTargetFixupKind 
NumTargetFixupKinds 

Definition at line 26 of file AVRFixupKinds.h.

Function Documentation

◆ getAddressSpace()

template<typename T >
AddressSpace llvm::AVR::getAddressSpace ( T V)

Definition at line 65 of file AVR.h.

References assert(), and NumAddrSpaces.

Referenced by getProgramMemoryBank(), and llvm::AVRTargetObjectFile::SelectSectionForGlobal().

◆ getProgramMemoryBank()

int llvm::AVR::getProgramMemoryBank ( MemSDNode const N)
inline

◆ isProgramMemoryAccess()

bool llvm::AVR::isProgramMemoryAccess ( MemSDNode const N)
inline

◆ isProgramMemoryAddress()

template<typename T >
bool llvm::AVR::isProgramMemoryAddress ( T V)

Checks if a given type is a pointer to program memory.

Definition at line 54 of file AVR.h.

References assert(), ProgramMemory, ProgramMemory1, ProgramMemory2, ProgramMemory3, ProgramMemory4, and ProgramMemory5.

Referenced by getProgramMemoryBank(), isProgramMemoryAccess(), and llvm::AVRTargetObjectFile::SelectSectionForGlobal().