summaryrefslogtreecommitdiff
path: root/closures/compiler/avr/cpuinfo.pas
diff options
context:
space:
mode:
Diffstat (limited to 'closures/compiler/avr/cpuinfo.pas')
-rw-r--r--closures/compiler/avr/cpuinfo.pas226
1 files changed, 226 insertions, 0 deletions
diff --git a/closures/compiler/avr/cpuinfo.pas b/closures/compiler/avr/cpuinfo.pas
new file mode 100644
index 0000000000..70c4e70886
--- /dev/null
+++ b/closures/compiler/avr/cpuinfo.pas
@@ -0,0 +1,226 @@
+{
+ Copyright (c) 2008 by the Free Pascal development team
+
+ Basic Processor information for the AVR
+
+ See the file COPYING.FPC, included in this distribution,
+ for details about the copyright.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+Unit CPUInfo;
+
+Interface
+
+ uses
+ globtype;
+
+Type
+ bestreal = double;
+ ts32real = single;
+ ts64real = double;
+ ts80real = type extended;
+ ts128real = type extended;
+ ts64comp = comp;
+
+ pbestreal=^bestreal;
+
+ { possible supported processors for this target }
+ tcputype =
+ (cpu_none,
+ cpu_avr1,
+ cpu_avr2,
+ cpu_avr25,
+ cpu_avr3,
+ cpu_avr31,
+ cpu_avr35,
+ cpu_avr4,
+ cpu_avr5,
+ cpu_avr51,
+ cpu_avr6
+ );
+
+ tcpuflags =
+ (AVR_HAS_JMP_CALL,
+ AVR_HAS_MOVW,
+ AVR_HAS_LPMX,
+ AVR_HAS_MUL,
+ AVR_HAS_RAMPZ,
+ AVR_HAS_ELPM,
+ AVR_HAS_ELPMX,
+ AVR_2_BYTE_PC,
+ AVR_3_BYTE_PC
+ );
+
+ tfputype =
+ (fpu_none,
+ fpu_soft,
+ fp_libgcc
+ );
+
+ tcontrollertype =
+ (ct_none,
+
+ ct_atmega16,
+ ct_atmega32,
+ ct_atmega48,
+ ct_atmega64,
+ ct_atmega128
+ );
+
+Const
+ {# Size of native extended floating point type }
+ extended_size = 12;
+ {# Size of a multimedia register }
+ mmreg_size = 16;
+ { target cpu string (used by compiler options) }
+ target_cpu_string = 'avr';
+
+ { calling conventions supported by the code generator }
+ supported_calling_conventions : tproccalloptions = [
+ pocall_internproc,
+ pocall_safecall,
+ pocall_stdcall,
+ { same as stdcall only different name mangling }
+ pocall_cdecl,
+ { same as stdcall only different name mangling }
+ pocall_cppdecl,
+ { same as stdcall but floating point numbers are handled like equal sized integers }
+ pocall_softfloat
+ ];
+
+ cputypestr : array[tcputype] of string[5] = ('',
+ 'AVR1',
+ 'AVR2',
+ 'AVR25',
+ 'AVR3',
+ 'AVR31',
+ 'AVR35',
+ 'AVR4',
+ 'AVR5',
+ 'AVR51',
+ 'AVR6'
+ );
+
+ fputypestr : array[tfputype] of string[6] = (
+ 'NONE',
+ 'SOFT',
+ 'LIBGCC'
+ );
+
+ embedded_controllers : array [tcontrollertype] of tcontrollerdatatype =
+ ((
+ controllertypestr:'';
+ controllerunitstr:'';
+ interruptvectors:0;
+ flashbase:0;
+ flashsize:0;
+ srambase:0;
+ sramsize:0;
+ eeprombase:0;
+ eepromsize:0
+ ),
+ (
+ controllertypestr:'ATMEGA16';
+ controllerunitstr:'ATMEGA16';
+ interruptvectors:0;
+ flashbase:0;
+ flashsize:$4000;
+ srambase:0;
+ sramsize:1024;
+ eeprombase:0;
+ eepromsize:512
+ ),
+ (
+ controllertypestr:'ATMEGA32';
+ controllerunitstr:'ATMEGA32';
+ interruptvectors:0;
+ flashbase:0;
+ flashsize:$8000;
+ srambase:0;
+ sramsize:1024;
+ eeprombase:0;
+ eepromsize:512
+ ),
+ (
+ controllertypestr:'ATMEGA48';
+ controllerunitstr:'ATMEGA48';
+ interruptvectors:0;
+ flashbase:0;
+ flashsize:$1000;
+ srambase:0;
+ sramsize:512;
+ eeprombase:0;
+ eepromsize:256;
+ ),
+ (
+ controllertypestr:'ATMEGA64';
+ controllerunitstr:'ATMEGA64';
+ interruptvectors:0;
+ flashbase:0;
+ flashsize:$10000;
+ srambase:0;
+ sramsize:4096;
+ eeprombase:0;
+ eepromsize:2048;
+ ),
+ (
+ controllertypestr:'ATMEGA128';
+ controllerunitstr:'ATMEGA128';
+ interruptvectors:0;
+ flashbase:0;
+ flashsize:$20000;
+ srambase:0;
+ sramsize:4096;
+ eeprombase:0;
+ eepromsize:4096;
+ )
+ );
+
+ { Supported optimizations, only used for information }
+ supported_optimizerswitches = genericlevel1optimizerswitches+
+ genericlevel2optimizerswitches+
+ genericlevel3optimizerswitches-
+ { no need to write info about those }
+ [cs_opt_level1,cs_opt_level2,cs_opt_level3]+
+ [cs_opt_regvar,cs_opt_loopunroll,cs_opt_tailrecursion,
+ cs_opt_stackframe,cs_opt_nodecse];
+ cpuflagsstr : array[tcpuflags] of string[20] =
+ ('AVR_HAS_JMP_CALL',
+ 'AVR_HAS_MOVW',
+ 'AVR_HAS_LPMX',
+ 'AVR_HAS_MUL',
+ 'AVR_HAS_RAMPZ',
+ 'AVR_HAS_ELPM',
+ 'AVR_HAS_ELPMX',
+ 'AVR_2_BYTE_PC',
+ 'AVR_3_BYTE_PC'
+ );
+
+
+ level1optimizerswitches = genericlevel1optimizerswitches;
+ level2optimizerswitches = genericlevel2optimizerswitches + level1optimizerswitches +
+ [cs_opt_regvar,cs_opt_stackframe,cs_opt_tailrecursion];
+ level3optimizerswitches = genericlevel3optimizerswitches + level2optimizerswitches + [{,cs_opt_loopunroll}];
+
+ cpu_capabilities : array[tcputype] of set of tcpuflags =
+ ( { cpu_none } [],
+ { cpu_avr1 } [],
+ { cpu_avr2 } [],
+ { cpu_avr25 } [],
+ { cpu_avr3 } [],
+ { cpu_avr31 } [],
+ { cpu_avr35 } [],
+ { cpu_avr4 } [],
+ { cpu_avr5 } [],
+ { cpu_avr51 } [],
+ { cpu_avr6 } []
+ );
+
+Implementation
+
+end.