~ubuntu-branches/ubuntu/dapper/fpc/dapper

« back to all changes in this revision

Viewing changes to compiler/globtype.pas

  • Committer: Bazaar Package Importer
  • Author(s): Carlos Laviola
  • Date: 2004-08-12 16:29:37 UTC
  • mfrom: (1.2.1 upstream) (2.1.1 warty)
  • Revision ID: james.westby@ubuntu.com-20040812162937-moo8ulvysp1ln771
Tags: 1.9.4-5
fp-compiler: needs ld, adding dependency on binutils.  (Closes: #265265)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
{
2
 
    $Id: globtype.pas,v 1.1.2.1 2000/08/05 13:22:30 peter Exp $
3
 
    Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
 
2
    $Id: globtype.pas,v 1.56 2004/05/23 15:06:20 peter Exp $
 
3
    Copyright (c) 1998-2002 by Florian Klaempfl, Pierre Muller
4
4
 
5
5
    Global types
6
6
 
20
20
 ****************************************************************************
21
21
}
22
22
unit globtype;
 
23
 
 
24
{$i fpcdefs.inc}
 
25
 
23
26
interface
24
27
 
25
 
{$ifdef FPC}
26
 
  {$ifdef PACKENUMFIXED}
27
 
    {$PACKENUM 1}
28
 
  {$endif}
29
 
{$endif}
30
 
 
31
28
    const
32
29
       maxidlen = 64;
33
30
 
34
31
    type
35
 
       { System independent float names }
36
 
{$ifdef i386}
37
 
       bestreal = extended;
38
 
       ts32real = single;
39
 
       ts64real = double;
40
 
       ts80real = extended;
41
 
       ts64comp = extended;
42
 
{$endif}
43
 
{$ifdef m68k}
44
 
       bestreal = real;
45
 
       ts32real = single;
46
 
       ts64real = double;
47
 
       ts80real = extended;
48
 
       ts64comp = comp;
49
 
{$endif}
50
 
{$ifdef alpha}
51
 
       bestreal = extended;
52
 
       ts32real = single;
53
 
       ts64real = double;
54
 
       ts80real = extended;
55
 
       ts64comp = comp;
56
 
{$endif}
57
 
{$ifdef powerpc}
58
 
       bestreal = double;
59
 
       ts32real = single;
60
 
       ts64real = double;
61
 
       ts80real = extended;
62
 
       ts64comp = comp;
63
 
{$endif powerpc}
64
 
       pbestreal=^bestreal;
 
32
{$ifdef ver1_0}
 
33
       { Bootstrapping }
 
34
       PtrInt = DWord;
 
35
       SizeInt = Longint;
 
36
{$endif ver1_0}
65
37
 
66
38
       { Switches which can be changed locally }
67
39
       tlocalswitch = (cs_localnone,
68
40
         { codegen }
69
 
         cs_check_overflow,cs_check_range,cs_check_object_ext,
 
41
         cs_check_overflow,cs_check_range,cs_check_object,
70
42
         cs_check_io,cs_check_stack,
71
43
         cs_omitstackframe,cs_do_assertion,cs_generate_rtti,
 
44
         cs_full_boolean_eval,cs_typed_const_writable,
72
45
         { mmx }
73
46
         cs_mmx,cs_mmx_saturation,
74
47
         { parser }
83
56
         { support }
84
57
         cs_support_inline,cs_support_goto,cs_support_macro,
85
58
         cs_support_c_operators,cs_static_keyword,
86
 
         cs_typed_const_not_changeable,
87
59
         { generation }
88
60
         cs_profile,cs_debuginfo,cs_browser,cs_local_browser,cs_compilesystem,
89
 
         cs_lineinfo,
 
61
         cs_lineinfo,cs_threading,cs_implicit_exceptions,
90
62
         { linking }
91
 
         cs_create_smart,cs_create_dynamic
 
63
         cs_create_smart,cs_create_dynamic,cs_create_pic
92
64
       );
93
65
       tmoduleswitches = set of tmoduleswitch;
94
66
 
101
73
         cs_load_objpas_unit,
102
74
         cs_load_gpc_unit,
103
75
         { optimizer }
104
 
         cs_regalloc,cs_uncertainopts,cs_littlesize,cs_optimize,
105
 
         cs_fastoptimize, cs_slowoptimize,cs_align,
 
76
         cs_regvars,cs_no_regalloc,cs_uncertainopts,cs_littlesize,
 
77
         cs_optimize,cs_fastoptimize,cs_slowoptimize,cs_align,
106
78
         { browser }
107
79
         cs_browser_log,
108
80
         { debugger }
109
 
         cs_gdb_dbx,cs_gdb_gsym,cs_gdb_heaptrc,cs_gdb_lineinfo,cs_checkpointer,
 
81
         cs_gdb_dbx,cs_gdb_gsym,cs_gdb_heaptrc,cs_gdb_lineinfo,
 
82
         cs_checkpointer,cs_gdb_valgrind,
110
83
         { assembling }
111
84
         cs_asm_leave,cs_asm_extern,cs_asm_pipe,cs_asm_source,
112
 
         cs_asm_regalloc,cs_asm_tempalloc,
 
85
         cs_asm_regalloc,cs_asm_tempalloc,cs_asm_nodes,
113
86
         { linking }
114
87
         cs_link_extern,cs_link_static,cs_link_smart,cs_link_shared,cs_link_deffile,
115
 
         cs_link_strip,cs_link_toc,cs_link_staticflag
 
88
         cs_link_strip,cs_link_staticflag,cs_link_on_target,cs_link_internal,
 
89
         cs_link_map,cs_link_pthread
116
90
       );
117
91
       tglobalswitches = set of tglobalswitch;
118
92
 
119
93
       { Switches which can be changed by a mode (fpc,tp7,delphi) }
120
94
       tmodeswitch = (m_none,m_all, { needed for keyword }
121
95
         { generic }
122
 
         m_fpc,m_objfpc,m_delphi,m_tp,m_tp7,m_gpc,
 
96
         m_fpc,m_objfpc,m_delphi,m_tp7,m_gpc,m_mac,
123
97
         { more specific }
124
98
         m_class,               { delphi class model }
125
99
         m_objpas,              { load objpas unit }
134
108
         m_autoderef,           { does auto dereferencing of struct. vars }
135
109
         m_initfinal,           { initialization/finalization for units }
136
110
         m_add_pointer,         { allow pointer add/sub operations }
137
 
         m_default_ansistring   { ansistring turned on by default }
 
111
         m_default_ansistring,  { ansistring turned on by default }
 
112
         m_out,                 { support the calling convention OUT }
 
113
         m_default_para,        { support default parameters }
 
114
         m_hintdirective,       { support hint directives }
 
115
         m_duplicate_names      { allow locals/paras to have duplicate names of globals }
138
116
       );
139
117
       tmodeswitches = set of tmodeswitch;
140
118
 
141
 
       { win32 sub system }
142
 
       tapptype = (at_none,
143
 
         at_gui,at_cui
 
119
       { Win32, OS/2 & MacOS application types }
 
120
       tapptype = (
 
121
         app_none,
 
122
         app_gui,               { graphic user-interface application}
 
123
         app_cui,       { console application}
 
124
         app_fs,        { full-screen type application (OS/2 and EMX only) }
 
125
         app_tool       { tool application, (MPW tool for MacOS, MacOS only)}
 
126
       );
 
127
 
 
128
       { interface types }
 
129
       tinterfacetypes = (
 
130
         it_interfacecom,
 
131
         it_interfacecorba
144
132
       );
145
133
 
146
134
       { currently parsed block type }
147
135
       tblock_type = (bt_none,
148
 
         bt_general,bt_type,bt_const,bt_except
149
 
       );
150
 
 
151
 
       { packrecords types }
152
 
       tpackrecords = (packrecord_none,
153
 
         packrecord_1,packrecord_2,packrecord_4,
154
 
         packrecord_8,packrecord_16,packrecord_32,
155
 
         packrecord_C
156
 
       );
157
 
 
158
 
    const
159
 
       packrecordalignment : array[tpackrecords] of byte=(0,
160
 
         1,2,4,8,16,32,1
161
 
       );
 
136
         bt_general,bt_type,bt_const,bt_except,bt_body
 
137
       );
 
138
 
 
139
       { calling convention for tprocdef and tprocvardef }
 
140
       tproccalloption=(pocall_none,
 
141
         { procedure uses C styled calling }
 
142
         pocall_cdecl,
 
143
         { C++ calling conventions }
 
144
         pocall_cppdecl,
 
145
         { Procedure is used for internal compiler calls }
 
146
         pocall_compilerproc,
 
147
         { Far16 for OS/2 }
 
148
         pocall_far16,
 
149
         { Old style FPC default calling }
 
150
         pocall_oldfpccall,
 
151
         { Procedure is an assembler macro }
 
152
         pocall_inline,
 
153
         { Procedure has compiler magic}
 
154
         pocall_internproc,
 
155
         { procedure is a system call, applies e.g. to MorphOS and PalmOS }
 
156
         pocall_syscall,
 
157
         { pascal standard left to right }
 
158
         pocall_pascal,
 
159
         { procedure uses register (fastcall) calling }
 
160
         pocall_register,
 
161
         { safe call calling conventions }
 
162
         pocall_safecall,
 
163
         { procedure uses stdcall call }
 
164
         pocall_stdcall,
 
165
         { Special calling convention for cpus without a floating point
 
166
           unit. Floating point numbers are passed in integer registers
 
167
           instead of floating point registers. Depending on the other
 
168
           available calling conventions available for the cpu
 
169
           this replaces either pocall_fastcall or pocall_stdcall.
 
170
         }
 
171
         pocall_softfloat
 
172
       );
 
173
       tproccalloptions = set of tproccalloption;
 
174
 
 
175
       tprocinfoflag=(
 
176
         { procedure uses asm }
 
177
         pi_uses_asm,
 
178
         { procedure does a call }
 
179
         pi_do_call,
 
180
         { procedure has a try statement = no register optimization }
 
181
         pi_uses_exceptions,
 
182
         { procedure is declared as @var(assembler), don't optimize}
 
183
         pi_is_assembler,
 
184
         { procedure contains data which needs to be finalized }
 
185
         pi_needs_implicit_finally,
 
186
         { procedure has the implicit try..finally generated }
 
187
         pi_has_implicit_finally,
 
188
         { procedure uses fpu}
 
189
         pi_uses_fpu,
 
190
         { procedure uses GOT for PIC code }
 
191
         pi_needs_got
 
192
       );
 
193
       tprocinfoflags=set of tprocinfoflag;
 
194
 
 
195
{$ifdef ansistring_bits}
 
196
       Tstringbits=(sb_16,sb_32,sb_64);
 
197
{$endif}
 
198
 
 
199
     const
 
200
       proccalloptionStr : array[tproccalloption] of string[14]=('',
 
201
           'CDecl',
 
202
           'CPPDecl',
 
203
           'CompilerProc',
 
204
           'Far16',
 
205
           'OldFPCCall',
 
206
           'Inline',
 
207
           'InternProc',
 
208
           'SysCall',
 
209
           'Pascal',
 
210
           'Register',
 
211
           'SafeCall',
 
212
           'StdCall',
 
213
           'SoftFloat'
 
214
         );
 
215
 
 
216
       { Default calling convention }
 
217
{$ifdef x86}
 
218
       pocall_default = pocall_register;
 
219
{$else}
 
220
       pocall_default = pocall_stdcall;
 
221
{$endif}
162
222
 
163
223
    type
164
224
       stringid = string[maxidlen];
166
226
       tnormalset = set of byte; { 256 elements set }
167
227
       pnormalset = ^tnormalset;
168
228
 
 
229
       pboolean   = ^boolean;
169
230
       pdouble    = ^double;
170
231
       pbyte      = ^byte;
171
232
       pword      = ^word;
172
233
       plongint   = ^longint;
 
234
       plongintarray = plongint;
173
235
 
174
 
    {$IFDEF TP}
175
 
       Tconstant=record
176
 
            case signed:boolean of
177
 
                false:
178
 
                    (valueu:longint);
179
 
                true:
180
 
                    (values:longint);
181
 
       end;
182
 
    {$ELSE}
183
236
       Tconstant=record
184
237
            case signed:boolean of
185
238
                false:
187
240
                true:
188
241
                    (values:longint);
189
242
       end;
190
 
    {$ENDIF}
 
243
 
 
244
{$ifndef Delphi}
 
245
  {$ifndef xFPC}
 
246
    type
 
247
      pguid = ^tguid;
 
248
      tguid = packed record
 
249
        D1: LongWord;
 
250
        D2: Word;
 
251
        D3: Word;
 
252
        D4: array[0..7] of Byte;
 
253
      end;
 
254
  {$endif}
 
255
{$endif}
191
256
 
192
257
    const
193
258
       { link options }
197
262
       link_smart   = $4;
198
263
       link_shared  = $8;
199
264
 
200
 
 
201
265
implementation
202
266
 
203
 
 
204
 
begin
205
267
end.
206
268
{
207
269
  $Log: globtype.pas,v $
208
 
  Revision 1.1.2.1  2000/08/05 13:22:30  peter
209
 
    * packenum 1 when packenumfixed is defined
210
 
 
211
 
  Revision 1.1  2000/07/13 06:29:51  michael
212
 
  + Initial import
213
 
 
214
 
  Revision 1.32  2000/06/11 07:00:21  peter
215
 
    * fixed pchar->string conversion for delphi mode
216
 
 
217
 
  Revision 1.31  2000/05/31 06:57:11  florian
218
 
    * first implementation of -Oa switch
219
 
 
220
 
  Revision 1.30  2000/05/16 20:19:05  pierre
221
 
    + -CR option to enable check for object virtual method
222
 
 
223
 
  Revision 1.29  2000/02/28 17:23:57  daniel
224
 
  * Current work of symtable integration committed. The symtable can be
225
 
    activated by defining 'newst', but doesn't compile yet. Changes in type
226
 
    checking and oop are completed. What is left is to write a new
227
 
    symtablestack and adapt the parser to use it.
228
 
 
229
 
  Revision 1.28  2000/02/09 13:22:53  peter
230
 
    * log truncated
231
 
 
232
 
  Revision 1.27  2000/02/09 10:35:48  peter
233
 
    * -Xt option to link staticly against c libs
234
 
 
235
 
  Revision 1.26  2000/02/06 17:20:52  peter
236
 
    * -gl switch for auto lineinfo including
237
 
 
238
 
  Revision 1.25  2000/01/07 01:14:27  peter
239
 
    * updated copyright to 2000
240
 
 
241
 
  Revision 1.24  1999/11/12 11:03:50  peter
242
 
    * searchpaths changed to stringqueue object
243
 
 
244
 
  Revision 1.23  1999/11/09 13:00:38  peter
245
 
    * define FPC_DELPHI,FPC_OBJFPC,FPC_TP,FPC_GPC
246
 
    * initial support for ansistring default with modes
247
 
 
248
 
  Revision 1.22  1999/11/06 14:34:21  peter
249
 
    * truncated log to 20 revs
250
 
 
251
 
  Revision 1.21  1999/11/04 10:55:31  peter
252
 
    * TSearchPathString for the string type of the searchpaths, which is
253
 
      ansistring under FPC/Delphi
254
 
 
255
 
  Revision 1.20  1999/10/22 10:39:34  peter
256
 
    * split type reading from pdecl to ptype unit
257
 
    * parameter_dec routine is now used for procedure and procvars
258
 
 
259
 
  Revision 1.19  1999/09/20 16:38:54  peter
260
 
    * cs_create_smart instead of cs_smartlink
261
 
    * -CX is create smartlink
262
 
    * -CD is create dynamic, but does nothing atm.
263
 
 
264
 
  Revision 1.18  1999/09/08 16:05:32  peter
265
 
    * pointer add/sub is now as expected and the same results as inc/dec
266
 
 
267
 
  Revision 1.17  1999/08/13 15:44:58  peter
268
 
    * first things to include lineinfo in the executable
269
 
 
270
 
  Revision 1.16  1999/08/11 17:26:33  peter
271
 
    * tlinker object is now inherited for win32 and dos
272
 
    * postprocessexecutable is now a method of tlinker
273
 
 
274
 
  Revision 1.15  1999/08/04 13:02:42  jonas
275
 
    * all tokens now start with an underscore
276
 
    * PowerPC compiles!!
277
 
 
278
 
  Revision 1.14  1999/08/01 23:04:48  michael
279
 
  + Changes for Alpha
280
 
 
281
 
  Revision 1.13  1999/07/23 16:05:21  peter
282
 
    * alignment is now saved in the symtable
283
 
    * C alignment added for records
284
 
    * PPU version increased to solve .12 <-> .13 probs
 
270
  Revision 1.56  2004/05/23 15:06:20  peter
 
271
    * implicit_finally flag must be set in pass1
 
272
    * add check whether the implicit frame is generated when expected
 
273
 
 
274
  Revision 1.55  2004/05/23 14:32:17  peter
 
275
    * tprocinfoflag moved to globtype
 
276
 
 
277
  Revision 1.54  2004/05/02 11:48:46  peter
 
278
    * strlenint is replaced with sizeint
 
279
 
 
280
  Revision 1.53  2004/04/29 19:56:36  daniel
 
281
    * Prepare compiler infrastructure for multiple ansistring types
 
282
 
 
283
  Revision 1.52  2004/04/28 15:19:03  florian
 
284
    + syscall directive support for MorphOS added
 
285
 
 
286
  Revision 1.51  2004/04/04 18:46:09  olle
 
287
    + added $APPTYPE TOOL for MPW tools on MacOS
 
288
 
 
289
  Revision 1.50  2004/03/10 22:52:57  peter
 
290
    * more stabs fixes
 
291
    * special mode -gv for valgrind compatible stabs
 
292
 
 
293
  Revision 1.49  2004/02/15 16:34:18  marco
 
294
   * pthread on -CURRENT related fixes.
 
295
 
 
296
  Revision 1.48  2003/12/23 23:22:35  peter
 
297
    * register calling is now default for i386
 
298
 
 
299
  Revision 1.47  2003/12/14 20:51:17  daniel
 
300
    * Register calling disabled again
 
301
 
 
302
  Revision 1.46  2003/12/14 20:24:28  daniel
 
303
    * Register allocator speed optimizations
 
304
      - Worklist no longer a ringbuffer
 
305
      - No find operations are left
 
306
      - Simplify now done in constant time
 
307
      - unusedregs is now a Tsuperregisterworklist
 
308
      - Microoptimizations
 
309
 
 
310
  Revision 1.45  2003/12/04 23:27:32  peter
 
311
    * remove redundant calls to add_edge_used
 
312
 
 
313
  Revision 1.44  2003/11/07 15:58:32  florian
 
314
    * Florian's culmutative nr. 1; contains:
 
315
      - invalid calling conventions for a certain cpu are rejected
 
316
      - arm softfloat calling conventions
 
317
      - -Sp for cpu dependend code generation
 
318
      - several arm fixes
 
319
      - remaining code for value open array paras on heap
 
320
 
 
321
  Revision 1.43  2003/09/28 13:39:58  peter
 
322
    * default calling convention changed to stdcall
 
323
 
 
324
  Revision 1.42  2003/09/07 22:09:35  peter
 
325
    * preparations for different default calling conventions
 
326
    * various RA fixes
 
327
 
 
328
  Revision 1.41  2003/09/04 21:37:29  olle
 
329
    + added new lagnuage mode: MAC
 
330
 
 
331
  Revision 1.40  2003/09/03 15:55:00  peter
 
332
    * NEWRA branch merged
 
333
 
 
334
  Revision 1.39  2003/08/09 18:56:54  daniel
 
335
    * cs_regalloc renamed to cs_regvars to avoid confusion with register
 
336
      allocator
 
337
    * Some preventive changes to i386 spillinh code
 
338
 
 
339
  Revision 1.38  2003/04/27 11:21:32  peter
 
340
    * aktprocdef renamed to current_procdef
 
341
    * procinfo renamed to current_procinfo
 
342
    * procinfo will now be stored in current_module so it can be
 
343
      cleaned up properly
 
344
    * gen_main_procsym changed to create_main_proc and release_main_proc
 
345
      to also generate a tprocinfo structure
 
346
    * fixed unit implicit initfinal
 
347
 
 
348
  Revision 1.37  2003/04/27 07:29:50  peter
 
349
    * current_procdef cleanup, current_procdef is now always nil when parsing
 
350
      a new procdef declaration
 
351
    * aktprocsym removed
 
352
    * lexlevel removed, use symtable.symtablelevel instead
 
353
    * implicit init/final code uses the normal genentry/genexit
 
354
    * funcret state checking updated for new funcret handling
 
355
 
 
356
  Revision 1.36  2003/04/22 23:50:22  peter
 
357
    * firstpass uses expectloc
 
358
    * checks if there are differences between the expectloc and
 
359
      location.loc from secondpass in EXTDEBUG
 
360
 
 
361
  Revision 1.35  2003/03/08 08:59:07  daniel
 
362
    + $define newra will enable new register allocator
 
363
    + getregisterint will return imaginary registers with $newra
 
364
    + -sr switch added, will skip register allocation so you can see
 
365
      the direct output of the code generator before register allocation
 
366
 
 
367
  Revision 1.34  2002/10/16 19:01:43  peter
 
368
    + $IMPLICITEXCEPTIONS switch to turn on/off generation of the
 
369
      implicit exception frames for procedures with initialized variables
 
370
      and for constructors. The default is on for compatibility
 
371
 
 
372
  Revision 1.33  2002/10/14 19:43:41  peter
 
373
    * threading switch, defines the symbol FPC_THREADING
 
374
 
 
375
  Revision 1.32  2002/10/05 12:43:24  carl
 
376
    * fixes for Delphi 6 compilation
 
377
     (warning : Some features do not work under Delphi)
 
378
 
 
379
  Revision 1.31  2002/08/19 19:36:42  peter
 
380
    * More fixes for cross unit inlining, all tnodes are now implemented
 
381
    * Moved pocall_internconst to po_internconst because it is not a
 
382
      calling type at all and it conflicted when inlining of these small
 
383
      functions was requested
 
384
 
 
385
  Revision 1.30  2002/08/12 15:08:39  carl
 
386
    + stab register indexes for powerpc (moved from gdb to cpubase)
 
387
    + tprocessor enumeration moved to cpuinfo
 
388
    + linker in target_info is now a class
 
389
    * many many updates for m68k (will soon start to compile)
 
390
    - removed some ifdef or correct them for correct cpu
 
391
 
 
392
  Revision 1.29  2002/08/06 20:55:20  florian
 
393
    * first part of ppc calling conventions fix
 
394
 
 
395
  Revision 1.28  2002/07/04 20:43:00  florian
 
396
    * first x86-64 patches
 
397
 
 
398
  Revision 1.27  2002/07/01 18:46:22  peter
 
399
    * internal linker
 
400
    * reorganized aasm layer
 
401
 
 
402
  Revision 1.26  2002/05/18 13:34:08  peter
 
403
    * readded missing revisions
 
404
 
 
405
  Revision 1.25  2002/05/16 19:46:36  carl
 
406
  + defines.inc -> fpcdefs.inc to avoid conflicts if compiling by hand
 
407
  + try to fix temp allocation (still in ifdef)
 
408
  + generic constructor calls
 
409
  + start of tassembler / tmodulebase class cleanup
 
410
 
 
411
  Revision 1.23  2002/05/12 16:53:05  peter
 
412
    * moved entry and exitcode to ncgutil and cgobj
 
413
    * foreach gets extra argument for passing local data to the
 
414
      iterator function
 
415
    * -CR checks also class typecasts at runtime by changing them
 
416
      into as
 
417
    * fixed compiler to cycle with the -CR option
 
418
    * fixed stabs with elf writer, finally the global variables can
 
419
      be watched
 
420
    * removed a lot of routines from cga unit and replaced them by
 
421
      calls to cgobj
 
422
    * u32bit-s32bit updates for and,or,xor nodes. When one element is
 
423
      u32bit then the other is typecasted also to u32bit without giving
 
424
      a rangecheck warning/error.
 
425
    * fixed pascal calling method with reversing also the high tree in
 
426
      the parast, detected by tcalcst3 test
 
427
 
 
428
  Revision 1.22  2002/04/21 19:02:03  peter
 
429
    * removed newn and disposen nodes, the code is now directly
 
430
      inlined from pexpr
 
431
    * -an option that will write the secondpass nodes to the .s file, this
 
432
      requires EXTDEBUG define to actually write the info
 
433
    * fixed various internal errors and crashes due recent code changes
 
434
 
 
435
  Revision 1.21  2002/03/24 19:05:59  carl
 
436
  + patch for SPARC from Mazen NEIFER
 
437
 
 
438
  Revision 1.20  2002/01/24 18:25:48  peter
 
439
   * implicit result variable generation for assembler routines
 
440
   * removed m_tp modeswitch, use m_tp7 or not(m_fpc) instead
285
441
 
286
442
}