LLVM  6.0.0svn
Namespaces | Enumerations | Functions
llvm::AVR Namespace Reference

Contains the AVR backend. More...

Namespaces

 fixups
 

Enumerations

enum  AddressSpace { DataMemory, ProgramMemory }
 
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_sym_diff, fixup_16_ldst, 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)
 
bool isProgramMemoryAccess (MemSDNode const *N)
 

Detailed Description

Contains the AVR backend.

Enumeration Type Documentation

◆ AddressSpace

Enumerator
DataMemory 
ProgramMemory 

Definition at line 40 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 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 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_sym_diff 

Fixup to calculate the difference between two symbols.

Is the only stateful fixup. We do not support it yet.

fixup_16_ldst 
fixup_lds_sts_16 
fixup_port6 

A 6-bit port address.

fixup_port5 

A 5-bit port address.

LastTargetFixupKind 
NumTargetFixupKinds 

Definition at line 27 of file AVRFixupKinds.h.

Function Documentation

◆ isProgramMemoryAccess()

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

◆ isProgramMemoryAddress()

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

Definition at line 42 of file AVR.h.

References ProgramMemory.

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