Browse Source

* fixed for non i386/m68k cpus

florian 22 years ago
parent
commit
63d1bee0d6
1 changed files with 770 additions and 768 deletions
  1. 770 768
      tests/test/cg/tsubst.pp

+ 770 - 768
tests/test/cg/tsubst.pp

@@ -1,769 +1,771 @@
-{****************************************************************}
-{  CODE GENERATOR TEST PROGRAM                                   }
-{****************************************************************}
-{ NODE TESTED : secondsubscriptn(), partial secondload()         }
-{****************************************************************}
-{ PRE-REQUISITES: secondload()                                   }
-{                 secondassign()                                 }
-{****************************************************************}
-{ DEFINES:   VERBOSE = Write test information to screen          }
-{            FPC     = Target is FreePascal compiler             }
-{****************************************************************}
-{ REMARKS:                                                       }
-{                                                                }
-{                                                                }
-{                                                                }
-{****************************************************************}
-Program tsubst1;
-{$mode objfpc}
-
-
-{$IFNDEF FPC}
-type  smallint = integer;
-{$ENDIF}
-const
- { Should be equal to the maximum offset possible in indirect addressing
-   mode with displacement. (CPU SPECIFIC) }
-
-{$ifdef cpu86}
- MAX_DISP = 65535;
-{$endif}
-{$ifdef cpu68k}
- MAX_DISP = 32767;
-{$endif}
-
-{ These different alignments are described in the PowerPC ABI
-  supplement, they should represent most possible cases.
-}
-type
-tlevel1rec = record
- c: byte;
-end;
-
-tlevel2rec = record
- c: byte;
- d: byte;
- s: word;
- n: longint;
-end;
-
-tlevel3rec = record
- c: byte;
- s: word;
-end;
-
-tlevel4rec = record
- c: byte;
- i : int64;
- s: word;
-end;
-
-tlevel5rec = record
- c: byte;
- s: word;
- j: longint;
-end;
-
-tlevel1rec_big = record
- fill : array[1..MAX_DISP] of byte;
- c: byte;
-end;
-
-tlevel2rec_big = record
- fill : array[1..MAX_DISP] of byte;
- c: byte;
- d: byte;
- s: word;
- n: longint;
-end;
-
-tlevel3rec_big = record
- fill : array[1..MAX_DISP] of byte;
- c: byte;
- s: word;
-end;
-
-tlevel4rec_big = record
- fill : array[1..MAX_DISP] of byte;
- c: byte;
- i : int64;
- s: word;
-end;
-
-tlevel5rec_big = record
- fill : array[1..MAX_DISP] of byte;
- c: byte;
- s: word;
- j: longint;
-end;
-
-{ packed record, for testing misaligned access }
-tlevel1rec_packed = packed record
- c: byte;
-end;
-
-tlevel2rec_packed = packed record
- c: byte;
- d: byte;
- s: word;
- n: longint;
-end;
-
-tlevel3rec_packed = packed record
- c: byte;
- s: word;
-end;
-
-tlevel4rec_packed = packed record
- c: byte;
- i : int64;
- s: word;
-end;
-
-tlevel5rec_packed = packed record
- c: byte;
- s: word;
- j: longint;
-end;
-
-tclass1 = class
- fill : array[1..MAX_DISP] of byte;
- c: byte;
- s: word;
- j: longint;
-end;
-
-tclass2 = class
- c: byte;
- s: word;
- i: int64;
-end;
-
-
- { test with global variables }
- const
-  RESULT_U8BIT = $55;
-  RESULT_U16BIT = $500F;
-  RESULT_S32BIT = $500F0000;
-  RESULT_S64BIT = $500F0000;
-
-
-
-
-
- level1rec : tlevel1rec =
- (
-  c: RESULT_U8BIT
- );
-
- level2rec : tlevel2rec =
- (
-   c: RESULT_U8BIT;
-   d: RESULT_U8BIT;
-   s: RESULT_U16BIT;
-   n: RESULT_S32BIT;
- );
-
- level3rec : tlevel3rec =
- (
-  c: RESULT_U8BIT;
-  s: RESULT_U16BIT;
-
- );
-
- level4rec : tlevel4rec =
- (
-  c: RESULT_U8BIT;
-  i : RESULT_S64BIT;
-  s : RESULT_U16BIT
- );
-
- level5rec : tlevel5rec =
- (
-   c: RESULT_U8BIT;
-   s: RESULT_U16BIT;
-   j: RESULT_S32BIT;
- );
-
- level1rec_packed : tlevel1rec_packed =
- (
-  c: RESULT_U8BIT
- );
-
- level2rec_packed : tlevel2rec_packed =
- (
-   c: RESULT_U8BIT;
-   d: RESULT_U8BIT;
-   s: RESULT_U16BIT;
-   n: RESULT_S32BIT;
- );
-
- level3rec_packed : tlevel3rec_packed =
- (
-  c: RESULT_U8BIT;
-  s: RESULT_U16BIT;
- );
-
- level4rec_packed : tlevel4rec_packed =
- (
-  c: RESULT_U8BIT;
-  i : RESULT_S64BIT;
-  s : RESULT_U16BIT
- );
-
- level5rec_packed : tlevel5rec_packed =
- (
-   c: RESULT_U8BIT;
-   s: RESULT_U16BIT;
-   j: RESULT_S32BIT;
- );
-
-    procedure fail;
-    begin
-      WriteLn('Failure.');
-      halt(1);
-    end;
-
-var
- c,d: byte;
- s: word;
- n,j: longint;
- i: int64;
- failed : boolean;
- class1 : tclass1;
- class2 : tclass2;
-
- procedure clear_globals;
-  begin
-    c:=0;
-    d:=0;
-    s:=0;
-    n:=0;
-    j:=0;
-    i:=0;
-    class1:=nil;
-    class2:=nil
-  end;
-
-
- function getclass : tclass1;
-  begin
-    getclass := class1;
-  end;
-
- function getclass2: tclass2;
-  begin
-    getclass2 := class2;
-  end;
-
-{$ifndef cpu68k}
- procedure testlocal_big_1;
- var
-   local1rec_big : tlevel1rec_big;
-  begin
-     clear_globals;
-     local1rec_big.c := RESULT_U8BIT;
-     c:= local1rec_big.c;
-     if c <> RESULT_U8BIT then
-       failed := true;
-  end;
-
-
-  procedure testlocal_big_2;
-   var
-    local2rec_big : tlevel2rec_big;
-   begin
-     clear_globals;
-     { setup values - assign }
-     local2rec_big.c := RESULT_U8BIT;
-     local2rec_big.d := RESULT_U8BIT;
-     local2rec_big.s := RESULT_U16BIT;
-     local2rec_big.n := RESULT_S32BIT;
-     { load values - load }
-     c:= local2rec_big.c;
-     if c <> RESULT_U8BIT then
-       failed := true;
-     d:= local2rec_big.d;
-     if d <> RESULT_U8BIT then
-       failed := true;
-     s:= local2rec_big.s;
-     if s <> RESULT_U16BIT then
-       failed := true;
-     n:= local2rec_big.n;
-     if n <> RESULT_S32BIT then
-       failed := true;
-   end;
-
-
-   procedure testlocal_big_3;
-    var
-     local3rec_big : tlevel3rec_big;
-    begin
-     clear_globals;
-     { setup values - assign }
-     local3rec_big.c := RESULT_U8BIT;
-     local3rec_big.s := RESULT_U16BIT;
-     c:= local3rec_big.c;
-     if c <> RESULT_U8BIT then
-       failed := true;
-     s:= local3rec_big.s;
-     if s <> RESULT_U16BIT then
-       failed := true;
-    end;
-
-    procedure testlocal_big_4;
-    var
-     local4rec_big : tlevel4rec_big;
-     begin
-         clear_globals;
-         { setup values - assign }
-         local4rec_big.c := RESULT_U8BIT;
-         local4rec_big.i := RESULT_S64BIT;
-         local4rec_big.s := RESULT_U16BIT;
-
-         c:= local4rec_big.c;
-         if c <> RESULT_U8BIT then
-           failed := true;
-         i:= local4rec_big.i;
-         if i <> RESULT_S64BIT then
-           failed := true;
-         s:= local4rec_big.s;
-         if s <> RESULT_U16BIT then
-           failed := true;
-     end;
-
-
-     procedure testlocal_big_5;
-     var
-      local5rec_big : tlevel5rec_big;
-      begin
-       clear_globals;
-       { setup values - assign }
-       local5rec_big.c := RESULT_U8BIT;
-       local5rec_big.s := RESULT_U16BIT;
-       local5rec_big.j := RESULT_S32BIT;
-       c:= local5rec_big.c;
-       if c <> RESULT_U8BIT then
-        failed := true;
-       s:= local5rec_big.s;
-       if s <> RESULT_U16BIT then
-        failed := true;
-       j:= local5rec_big.j;
-       if j <> RESULT_S32BIT then
-        failed := true;
-     end;
-{$endif}
-
-procedure testlocals;
-var
- local1rec : tlevel1rec_packed;
- local2rec : tlevel2rec_packed;
- local3rec : tlevel3rec_packed;
- local4rec : tlevel4rec_packed;
- local5rec : tlevel5rec_packed;
-begin
- { normal record access }
- Write('Non-Aligned simple local record access (secondvecn())...');
- failed := false;
-
- clear_globals;
-
- clear_globals;
- local1rec.c := RESULT_U8BIT;
- c:= local1rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
-
- clear_globals;
- { setup values - assign }
- local2rec.c := RESULT_U8BIT;
- local2rec.d := RESULT_U8BIT;
- local2rec.s := RESULT_U16BIT;
- local2rec.n := RESULT_S32BIT;
- { load values - load }
- c:= local2rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- d:= local2rec.d;
- if d <> RESULT_U8BIT then
-   failed := true;
- s:= local2rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- n:= local2rec.n;
- if n <> RESULT_S32BIT then
-   failed := true;
-
-
- clear_globals;
- { setup values - assign }
- local3rec.c := RESULT_U8BIT;
- local3rec.s := RESULT_U16BIT;
- c:= local3rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= local3rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- clear_globals;
- { setup values - assign }
- local4rec.c := RESULT_U8BIT;
- local4rec.i := RESULT_S64BIT;
- local4rec.s := RESULT_U16BIT;
-
- c:= local4rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- i:= local4rec.i;
- if i <> RESULT_S64BIT then
-   failed := true;
- s:= local4rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- clear_globals;
- { setup values - assign }
- local5rec.c := RESULT_U8BIT;
- local5rec.s := RESULT_U16BIT;
- local5rec.j := RESULT_S32BIT;
-
- c:= local5rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= local5rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- j:= local5rec.j;
- if j <> RESULT_S32BIT then
-   failed := true;
-
- if failed then
-   fail
- else
-   WriteLN('Passed!');
-end;
-{---------------------------}
-
-var
- level1rec_big : tlevel1rec_big;
- level2rec_big : tlevel2rec_big;
- level3rec_big : tlevel3rec_big;
- level4rec_big : tlevel4rec_big;
- level5rec_big : tlevel5rec_big;
-begin
- { normal record access }
- Write('Aligned simple global record access (secondvecn())...');
- failed := false;
-
- clear_globals;
- c:= level1rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
-
- clear_globals;
- c:= level2rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- d:= level2rec.d;
- if d <> RESULT_U8BIT then
-   failed := true;
- s:= level2rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- n:= level2rec.n;
- if n <> RESULT_S32BIT then
-   failed := true;
-
-
- clear_globals;
- c:= level3rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= level3rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
-
- clear_globals;
- c:= level4rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- i:= level4rec.i;
- if i <> RESULT_S64BIT then
-   failed := true;
- s:= level4rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- clear_globals;
- c:= level5rec.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= level5rec.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- j:= level5rec.j;
- if j <> RESULT_S32BIT then
-   failed := true;
-
- if failed then
-   fail
- else
-   WriteLN('Passed!');
-
- Write('Non-Aligned simple global record access (secondvecn())...');
-
- clear_globals;
- c:= level1rec_packed.c;
- if c <> RESULT_U8BIT then
-   failed := true;
-
- clear_globals;
- c:= level2rec_packed.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- d:= level2rec_packed.d;
- if d <> RESULT_U8BIT then
-   failed := true;
- s:= level2rec_packed.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- n:= level2rec_packed.n;
- if n <> RESULT_S32BIT then
-   failed := true;
-
-
- clear_globals;
- c:= level3rec_packed.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= level3rec_packed.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
-
- clear_globals;
- c:= level4rec_packed.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- i:= level4rec_packed.i;
- if i <> RESULT_S64BIT then
-   failed := true;
- s:= level4rec_packed.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- clear_globals;
- c:= level5rec_packed.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= level5rec_packed.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- j:= level5rec_packed.j;
- if j <> RESULT_S32BIT then
-   failed := true;
-
- if failed then
-   fail
- else
-   WriteLN('Passed!');
-
- Write('Non-Aligned big global record access (secondvecn())...');
-
- clear_globals;
- level1rec_big.c := RESULT_U8BIT;
- c:= level1rec_big.c;
- if c <> RESULT_U8BIT then
-   failed := true;
-
- clear_globals;
- { setup values - assign }
- level2rec_big.c := RESULT_U8BIT;
- level2rec_big.d := RESULT_U8BIT;
- level2rec_big.s := RESULT_U16BIT;
- level2rec_big.n := RESULT_S32BIT;
- { load values - load }
- c:= level2rec_big.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- d:= level2rec_big.d;
- if d <> RESULT_U8BIT then
-   failed := true;
- s:= level2rec_big.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- n:= level2rec_big.n;
- if n <> RESULT_S32BIT then
-   failed := true;
-
-
- clear_globals;
- { setup values - assign }
- level3rec_big.c := RESULT_U8BIT;
- level3rec_big.s := RESULT_U16BIT;
- c:= level3rec_big.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= level3rec_big.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- clear_globals;
- { setup values - assign }
- level4rec_big.c := RESULT_U8BIT;
- level4rec_big.i := RESULT_S64BIT;
- level4rec_big.s := RESULT_U16BIT;
-
- c:= level4rec_big.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- i:= level4rec_big.i;
- if i <> RESULT_S64BIT then
-   failed := true;
- s:= level4rec_big.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- clear_globals;
- { setup values - assign }
- level5rec_big.c := RESULT_U8BIT;
- level5rec_big.s := RESULT_U16BIT;
- level5rec_big.j := RESULT_S32BIT;
-
- c:= level5rec_big.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- s:= level5rec_big.s;
- if s <> RESULT_U16BIT then
-   failed := true;
- j:= level5rec_big.j;
- if j <> RESULT_S32BIT then
-   failed := true;
-
- if failed then
-   fail
- else
-   WriteLN('Passed!');
-
- testlocals;
-
-{$ifndef cpu68k}
- Write('Non-Aligned big local record access (secondvecn())...');
- failed := false;
-
- testlocal_big_1;
- testlocal_big_2;
- testlocal_big_3;
- testlocal_big_4;
- testlocal_big_5;
- if failed then
-   fail
- else
-   WriteLN('Passed!');
-{$endif}
- Write('Aligned class big field access (secondvecn())...');
- clear_globals;
- failed := false;
-
-
- { LOC_REFERENCE }
- class1:=tclass1.create;
- class1.c:= RESULT_U8BIT;
- class1.j:= RESULT_S32BIT;
- class1.s:= RESULT_U16BIT;
- c:=class1.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- j:=class1.j;
- if j <> RESULT_S32BIT then
-   failed := true;
- s:=class1.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- class1.destroy;
- clear_globals;
-
- { LOC_REGISTER }
- class1:=tclass1.create;
- class1.c:= RESULT_U8BIT;
- class1.j:= RESULT_S32BIT;
- class1.s:= RESULT_U16BIT;
- c:=(getclass).c;
- if c <> RESULT_U8BIT then
-   failed := true;
- j:=(getclass).j;
- if j <> RESULT_S32BIT then
-   failed := true;
- s:=(getclass).s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- class1.destroy;
-
-
- if failed then
-   fail
- else
-   WriteLN('Passed!');
- {----------------------------------------------------------------------------}
- Write('Aligned class simple field access (secondvecn())...');
- clear_globals;
- failed := false;
-
-
- { LOC_REFERENCE }
- class2:=tclass2.create;
- class2.c:= RESULT_U8BIT;
- class2.i:= RESULT_S64BIT;
- class2.s:= RESULT_U16BIT;
- c:=class2.c;
- if c <> RESULT_U8BIT then
-   failed := true;
- i:=class2.i;
- if i <> RESULT_S64BIT then
-   failed := true;
- s:=class2.s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- class2.destroy;
- clear_globals;
-
- { LOC_REGISTER }
- class2:=tclass2.create;
- class2.c:= RESULT_U8BIT;
- class2.i:= RESULT_S64BIT;
- class2.s:= RESULT_U16BIT;
- c:=(getclass2).c;
- if c <> RESULT_U8BIT then
-   failed := true;
- i:=(getclass2).i;
- if i <> RESULT_S64BIT then
-   failed := true;
- s:=(getclass2).s;
- if s <> RESULT_U16BIT then
-   failed := true;
-
- class2.destroy;
-
-
- if failed then
-   fail
- else
-   WriteLN('Passed!');
-
-
-end.
-
-{
+{****************************************************************}
+{  CODE GENERATOR TEST PROGRAM                                   }
+{****************************************************************}
+{ NODE TESTED : secondsubscriptn(), partial secondload()         }
+{****************************************************************}
+{ PRE-REQUISITES: secondload()                                   }
+{                 secondassign()                                 }
+{****************************************************************}
+{ DEFINES:   VERBOSE = Write test information to screen          }
+{            FPC     = Target is FreePascal compiler             }
+{****************************************************************}
+{ REMARKS:                                                       }
+{                                                                }
+{                                                                }
+{                                                                }
+{****************************************************************}
+Program tsubst1;
+{$mode objfpc}
+
+
+{$IFNDEF FPC}
+type  smallint = integer;
+{$ENDIF}
+const
+ { Should be equal to the maximum offset possible in indirect addressing
+   mode with displacement. (CPU SPECIFIC) }
+
+{$ifdef cpu68k}
+ MAX_DISP = 32767;
+{$else}
+ MAX_DISP = 65535;
+{$endif}
+
+{ These different alignments are described in the PowerPC ABI
+  supplement, they should represent most possible cases.
+}
+type
+tlevel1rec = record
+ c: byte;
+end;
+
+tlevel2rec = record
+ c: byte;
+ d: byte;
+ s: word;
+ n: longint;
+end;
+
+tlevel3rec = record
+ c: byte;
+ s: word;
+end;
+
+tlevel4rec = record
+ c: byte;
+ i : int64;
+ s: word;
+end;
+
+tlevel5rec = record
+ c: byte;
+ s: word;
+ j: longint;
+end;
+
+tlevel1rec_big = record
+ fill : array[1..MAX_DISP] of byte;
+ c: byte;
+end;
+
+tlevel2rec_big = record
+ fill : array[1..MAX_DISP] of byte;
+ c: byte;
+ d: byte;
+ s: word;
+ n: longint;
+end;
+
+tlevel3rec_big = record
+ fill : array[1..MAX_DISP] of byte;
+ c: byte;
+ s: word;
+end;
+
+tlevel4rec_big = record
+ fill : array[1..MAX_DISP] of byte;
+ c: byte;
+ i : int64;
+ s: word;
+end;
+
+tlevel5rec_big = record
+ fill : array[1..MAX_DISP] of byte;
+ c: byte;
+ s: word;
+ j: longint;
+end;
+
+{ packed record, for testing misaligned access }
+tlevel1rec_packed = packed record
+ c: byte;
+end;
+
+tlevel2rec_packed = packed record
+ c: byte;
+ d: byte;
+ s: word;
+ n: longint;
+end;
+
+tlevel3rec_packed = packed record
+ c: byte;
+ s: word;
+end;
+
+tlevel4rec_packed = packed record
+ c: byte;
+ i : int64;
+ s: word;
+end;
+
+tlevel5rec_packed = packed record
+ c: byte;
+ s: word;
+ j: longint;
+end;
+
+tclass1 = class
+ fill : array[1..MAX_DISP] of byte;
+ c: byte;
+ s: word;
+ j: longint;
+end;
+
+tclass2 = class
+ c: byte;
+ s: word;
+ i: int64;
+end;
+
+
+ { test with global variables }
+ const
+  RESULT_U8BIT = $55;
+  RESULT_U16BIT = $500F;
+  RESULT_S32BIT = $500F0000;
+  RESULT_S64BIT = $500F0000;
+
+
+
+
+
+ level1rec : tlevel1rec =
+ (
+  c: RESULT_U8BIT
+ );
+
+ level2rec : tlevel2rec =
+ (
+   c: RESULT_U8BIT;
+   d: RESULT_U8BIT;
+   s: RESULT_U16BIT;
+   n: RESULT_S32BIT;
+ );
+
+ level3rec : tlevel3rec =
+ (
+  c: RESULT_U8BIT;
+  s: RESULT_U16BIT;
+
+ );
+
+ level4rec : tlevel4rec =
+ (
+  c: RESULT_U8BIT;
+  i : RESULT_S64BIT;
+  s : RESULT_U16BIT
+ );
+
+ level5rec : tlevel5rec =
+ (
+   c: RESULT_U8BIT;
+   s: RESULT_U16BIT;
+   j: RESULT_S32BIT;
+ );
+
+ level1rec_packed : tlevel1rec_packed =
+ (
+  c: RESULT_U8BIT
+ );
+
+ level2rec_packed : tlevel2rec_packed =
+ (
+   c: RESULT_U8BIT;
+   d: RESULT_U8BIT;
+   s: RESULT_U16BIT;
+   n: RESULT_S32BIT;
+ );
+
+ level3rec_packed : tlevel3rec_packed =
+ (
+  c: RESULT_U8BIT;
+  s: RESULT_U16BIT;
+ );
+
+ level4rec_packed : tlevel4rec_packed =
+ (
+  c: RESULT_U8BIT;
+  i : RESULT_S64BIT;
+  s : RESULT_U16BIT
+ );
+
+ level5rec_packed : tlevel5rec_packed =
+ (
+   c: RESULT_U8BIT;
+   s: RESULT_U16BIT;
+   j: RESULT_S32BIT;
+ );
+
+    procedure fail;
+    begin
+      WriteLn('Failure.');
+      halt(1);
+    end;
+
+var
+ c,d: byte;
+ s: word;
+ n,j: longint;
+ i: int64;
+ failed : boolean;
+ class1 : tclass1;
+ class2 : tclass2;
+
+ procedure clear_globals;
+  begin
+    c:=0;
+    d:=0;
+    s:=0;
+    n:=0;
+    j:=0;
+    i:=0;
+    class1:=nil;
+    class2:=nil
+  end;
+
+
+ function getclass : tclass1;
+  begin
+    getclass := class1;
+  end;
+
+ function getclass2: tclass2;
+  begin
+    getclass2 := class2;
+  end;
+
+{$ifndef cpu68k}
+ procedure testlocal_big_1;
+ var
+   local1rec_big : tlevel1rec_big;
+  begin
+     clear_globals;
+     local1rec_big.c := RESULT_U8BIT;
+     c:= local1rec_big.c;
+     if c <> RESULT_U8BIT then
+       failed := true;
+  end;
+
+
+  procedure testlocal_big_2;
+   var
+    local2rec_big : tlevel2rec_big;
+   begin
+     clear_globals;
+     { setup values - assign }
+     local2rec_big.c := RESULT_U8BIT;
+     local2rec_big.d := RESULT_U8BIT;
+     local2rec_big.s := RESULT_U16BIT;
+     local2rec_big.n := RESULT_S32BIT;
+     { load values - load }
+     c:= local2rec_big.c;
+     if c <> RESULT_U8BIT then
+       failed := true;
+     d:= local2rec_big.d;
+     if d <> RESULT_U8BIT then
+       failed := true;
+     s:= local2rec_big.s;
+     if s <> RESULT_U16BIT then
+       failed := true;
+     n:= local2rec_big.n;
+     if n <> RESULT_S32BIT then
+       failed := true;
+   end;
+
+
+   procedure testlocal_big_3;
+    var
+     local3rec_big : tlevel3rec_big;
+    begin
+     clear_globals;
+     { setup values - assign }
+     local3rec_big.c := RESULT_U8BIT;
+     local3rec_big.s := RESULT_U16BIT;
+     c:= local3rec_big.c;
+     if c <> RESULT_U8BIT then
+       failed := true;
+     s:= local3rec_big.s;
+     if s <> RESULT_U16BIT then
+       failed := true;
+    end;
+
+    procedure testlocal_big_4;
+    var
+     local4rec_big : tlevel4rec_big;
+     begin
+         clear_globals;
+         { setup values - assign }
+         local4rec_big.c := RESULT_U8BIT;
+         local4rec_big.i := RESULT_S64BIT;
+         local4rec_big.s := RESULT_U16BIT;
+
+         c:= local4rec_big.c;
+         if c <> RESULT_U8BIT then
+           failed := true;
+         i:= local4rec_big.i;
+         if i <> RESULT_S64BIT then
+           failed := true;
+         s:= local4rec_big.s;
+         if s <> RESULT_U16BIT then
+           failed := true;
+     end;
+
+
+     procedure testlocal_big_5;
+     var
+      local5rec_big : tlevel5rec_big;
+      begin
+       clear_globals;
+       { setup values - assign }
+       local5rec_big.c := RESULT_U8BIT;
+       local5rec_big.s := RESULT_U16BIT;
+       local5rec_big.j := RESULT_S32BIT;
+       c:= local5rec_big.c;
+       if c <> RESULT_U8BIT then
+        failed := true;
+       s:= local5rec_big.s;
+       if s <> RESULT_U16BIT then
+        failed := true;
+       j:= local5rec_big.j;
+       if j <> RESULT_S32BIT then
+        failed := true;
+     end;
+{$endif}
+
+procedure testlocals;
+var
+ local1rec : tlevel1rec_packed;
+ local2rec : tlevel2rec_packed;
+ local3rec : tlevel3rec_packed;
+ local4rec : tlevel4rec_packed;
+ local5rec : tlevel5rec_packed;
+begin
+ { normal record access }
+ Write('Non-Aligned simple local record access (secondvecn())...');
+ failed := false;
+
+ clear_globals;
+
+ clear_globals;
+ local1rec.c := RESULT_U8BIT;
+ c:= local1rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+
+ clear_globals;
+ { setup values - assign }
+ local2rec.c := RESULT_U8BIT;
+ local2rec.d := RESULT_U8BIT;
+ local2rec.s := RESULT_U16BIT;
+ local2rec.n := RESULT_S32BIT;
+ { load values - load }
+ c:= local2rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ d:= local2rec.d;
+ if d <> RESULT_U8BIT then
+   failed := true;
+ s:= local2rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ n:= local2rec.n;
+ if n <> RESULT_S32BIT then
+   failed := true;
+
+
+ clear_globals;
+ { setup values - assign }
+ local3rec.c := RESULT_U8BIT;
+ local3rec.s := RESULT_U16BIT;
+ c:= local3rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= local3rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ clear_globals;
+ { setup values - assign }
+ local4rec.c := RESULT_U8BIT;
+ local4rec.i := RESULT_S64BIT;
+ local4rec.s := RESULT_U16BIT;
+
+ c:= local4rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ i:= local4rec.i;
+ if i <> RESULT_S64BIT then
+   failed := true;
+ s:= local4rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ clear_globals;
+ { setup values - assign }
+ local5rec.c := RESULT_U8BIT;
+ local5rec.s := RESULT_U16BIT;
+ local5rec.j := RESULT_S32BIT;
+
+ c:= local5rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= local5rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ j:= local5rec.j;
+ if j <> RESULT_S32BIT then
+   failed := true;
+
+ if failed then
+   fail
+ else
+   WriteLN('Passed!');
+end;
+{---------------------------}
+
+var
+ level1rec_big : tlevel1rec_big;
+ level2rec_big : tlevel2rec_big;
+ level3rec_big : tlevel3rec_big;
+ level4rec_big : tlevel4rec_big;
+ level5rec_big : tlevel5rec_big;
+begin
+ { normal record access }
+ Write('Aligned simple global record access (secondvecn())...');
+ failed := false;
+
+ clear_globals;
+ c:= level1rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+
+ clear_globals;
+ c:= level2rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ d:= level2rec.d;
+ if d <> RESULT_U8BIT then
+   failed := true;
+ s:= level2rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ n:= level2rec.n;
+ if n <> RESULT_S32BIT then
+   failed := true;
+
+
+ clear_globals;
+ c:= level3rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= level3rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+
+ clear_globals;
+ c:= level4rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ i:= level4rec.i;
+ if i <> RESULT_S64BIT then
+   failed := true;
+ s:= level4rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ clear_globals;
+ c:= level5rec.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= level5rec.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ j:= level5rec.j;
+ if j <> RESULT_S32BIT then
+   failed := true;
+
+ if failed then
+   fail
+ else
+   WriteLN('Passed!');
+
+ Write('Non-Aligned simple global record access (secondvecn())...');
+
+ clear_globals;
+ c:= level1rec_packed.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+
+ clear_globals;
+ c:= level2rec_packed.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ d:= level2rec_packed.d;
+ if d <> RESULT_U8BIT then
+   failed := true;
+ s:= level2rec_packed.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ n:= level2rec_packed.n;
+ if n <> RESULT_S32BIT then
+   failed := true;
+
+
+ clear_globals;
+ c:= level3rec_packed.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= level3rec_packed.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+
+ clear_globals;
+ c:= level4rec_packed.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ i:= level4rec_packed.i;
+ if i <> RESULT_S64BIT then
+   failed := true;
+ s:= level4rec_packed.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ clear_globals;
+ c:= level5rec_packed.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= level5rec_packed.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ j:= level5rec_packed.j;
+ if j <> RESULT_S32BIT then
+   failed := true;
+
+ if failed then
+   fail
+ else
+   WriteLN('Passed!');
+
+ Write('Non-Aligned big global record access (secondvecn())...');
+
+ clear_globals;
+ level1rec_big.c := RESULT_U8BIT;
+ c:= level1rec_big.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+
+ clear_globals;
+ { setup values - assign }
+ level2rec_big.c := RESULT_U8BIT;
+ level2rec_big.d := RESULT_U8BIT;
+ level2rec_big.s := RESULT_U16BIT;
+ level2rec_big.n := RESULT_S32BIT;
+ { load values - load }
+ c:= level2rec_big.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ d:= level2rec_big.d;
+ if d <> RESULT_U8BIT then
+   failed := true;
+ s:= level2rec_big.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ n:= level2rec_big.n;
+ if n <> RESULT_S32BIT then
+   failed := true;
+
+
+ clear_globals;
+ { setup values - assign }
+ level3rec_big.c := RESULT_U8BIT;
+ level3rec_big.s := RESULT_U16BIT;
+ c:= level3rec_big.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= level3rec_big.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ clear_globals;
+ { setup values - assign }
+ level4rec_big.c := RESULT_U8BIT;
+ level4rec_big.i := RESULT_S64BIT;
+ level4rec_big.s := RESULT_U16BIT;
+
+ c:= level4rec_big.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ i:= level4rec_big.i;
+ if i <> RESULT_S64BIT then
+   failed := true;
+ s:= level4rec_big.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ clear_globals;
+ { setup values - assign }
+ level5rec_big.c := RESULT_U8BIT;
+ level5rec_big.s := RESULT_U16BIT;
+ level5rec_big.j := RESULT_S32BIT;
+
+ c:= level5rec_big.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ s:= level5rec_big.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+ j:= level5rec_big.j;
+ if j <> RESULT_S32BIT then
+   failed := true;
+
+ if failed then
+   fail
+ else
+   WriteLN('Passed!');
+
+ testlocals;
+
+{$ifndef cpu68k}
+ Write('Non-Aligned big local record access (secondvecn())...');
+ failed := false;
+
+ testlocal_big_1;
+ testlocal_big_2;
+ testlocal_big_3;
+ testlocal_big_4;
+ testlocal_big_5;
+ if failed then
+   fail
+ else
+   WriteLN('Passed!');
+{$endif}
+ Write('Aligned class big field access (secondvecn())...');
+ clear_globals;
+ failed := false;
+
+
+ { LOC_REFERENCE }
+ class1:=tclass1.create;
+ class1.c:= RESULT_U8BIT;
+ class1.j:= RESULT_S32BIT;
+ class1.s:= RESULT_U16BIT;
+ c:=class1.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ j:=class1.j;
+ if j <> RESULT_S32BIT then
+   failed := true;
+ s:=class1.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ class1.destroy;
+ clear_globals;
+
+ { LOC_REGISTER }
+ class1:=tclass1.create;
+ class1.c:= RESULT_U8BIT;
+ class1.j:= RESULT_S32BIT;
+ class1.s:= RESULT_U16BIT;
+ c:=(getclass).c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ j:=(getclass).j;
+ if j <> RESULT_S32BIT then
+   failed := true;
+ s:=(getclass).s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ class1.destroy;
+
+
+ if failed then
+   fail
+ else
+   WriteLN('Passed!');
+ {----------------------------------------------------------------------------}
+ Write('Aligned class simple field access (secondvecn())...');
+ clear_globals;
+ failed := false;
+
+
+ { LOC_REFERENCE }
+ class2:=tclass2.create;
+ class2.c:= RESULT_U8BIT;
+ class2.i:= RESULT_S64BIT;
+ class2.s:= RESULT_U16BIT;
+ c:=class2.c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ i:=class2.i;
+ if i <> RESULT_S64BIT then
+   failed := true;
+ s:=class2.s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ class2.destroy;
+ clear_globals;
+
+ { LOC_REGISTER }
+ class2:=tclass2.create;
+ class2.c:= RESULT_U8BIT;
+ class2.i:= RESULT_S64BIT;
+ class2.s:= RESULT_U16BIT;
+ c:=(getclass2).c;
+ if c <> RESULT_U8BIT then
+   failed := true;
+ i:=(getclass2).i;
+ if i <> RESULT_S64BIT then
+   failed := true;
+ s:=(getclass2).s;
+ if s <> RESULT_U16BIT then
+   failed := true;
+
+ class2.destroy;
+
+
+ if failed then
+   fail
+ else
+   WriteLN('Passed!');
+
+
+end.
+
+{
   $Log$
   $Log$
-  Revision 1.2  2002-09-07 15:40:56  peter
-    * old logs removed and tabs fixed
-
-  Revision 1.1  2002/05/09 20:16:05  carl
-  * subscriptn() secondpass testing...
-
-}
+  Revision 1.3  2003-04-22 13:03:36  florian
+    * fixed for non i386/m68k cpus
+
+  Revision 1.2  2002/09/07 15:40:56  peter
+    * old logs removed and tabs fixed
+
+  Revision 1.1  2002/05/09 20:16:05  carl
+  * subscriptn() secondpass testing...
+
+}