|
@@ -0,0 +1,407 @@
|
|
|
+{****************************************************************}
|
|
|
+{ CODE GENERATOR TEST PROGRAM }
|
|
|
+{****************************************************************}
|
|
|
+{ NODE TESTED : secondmoddiv() }
|
|
|
+{****************************************************************}
|
|
|
+{ PRE-REQUISITES: secondload() }
|
|
|
+{ secondassign() }
|
|
|
+{ secondtypeconv() }
|
|
|
+{****************************************************************}
|
|
|
+{ DEFINES: }
|
|
|
+{ FPC = Target is FreePascal compiler }
|
|
|
+{****************************************************************}
|
|
|
+{ REMARKS: }
|
|
|
+{ }
|
|
|
+{ }
|
|
|
+{ }
|
|
|
+{****************************************************************}
|
|
|
+
|
|
|
+{ CURRENT NODE (result): }
|
|
|
+{ LOC_REGISTER }
|
|
|
+{ LEFT NODE (operand) (numerator) }
|
|
|
+{ LOC_REFERENCE / LOC_MEM }
|
|
|
+{ LOC_REGISTER / LOC_CREGISTER }
|
|
|
+{ RIGHT NODE (operand (denominator) }
|
|
|
+{ ord constant node }
|
|
|
+{ LOC_REGISTER / LOC_CREGISTER }
|
|
|
+{ LOC_REFERENCE / LOC_MEM }
|
|
|
+
|
|
|
+
|
|
|
+function getlongcnt: longint;
|
|
|
+ begin
|
|
|
+ getlongcnt := -10;
|
|
|
+ end;
|
|
|
+
|
|
|
+ {$IFDEF FPC}
|
|
|
+function getcardinalcnt: cardinal;
|
|
|
+ begin
|
|
|
+ getcardinalcnt := 10;
|
|
|
+ end;
|
|
|
+
|
|
|
+function getint64cnt: int64;
|
|
|
+ begin
|
|
|
+ getint64cnt := -10;
|
|
|
+ end;
|
|
|
+
|
|
|
+ {$ENDIF}
|
|
|
+
|
|
|
+var
|
|
|
+ longres : longint;
|
|
|
+ longcnt : longint;
|
|
|
+{$IFDEF FPC}
|
|
|
+ cardinalres : cardinal;
|
|
|
+ cardinalcnt : cardinal;
|
|
|
+ int64res : int64;
|
|
|
+ int64cnt : int64;
|
|
|
+{$ENDIF}
|
|
|
+begin
|
|
|
+ WriteLn('------------------- LONGINT ------------------------');
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : ordinal constant');
|
|
|
+ { RIGHT : power of 2 ordconstn }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ longres := 24;
|
|
|
+ longres := longres div 4;
|
|
|
+ Write('Value should be 6...');
|
|
|
+ if longres = 6 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : power of 2 ordconstn }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ longres := 24;
|
|
|
+ longres := longres mod 4;
|
|
|
+ Write('Value should be 0...');
|
|
|
+ if longres = 0 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : LOC_REFERENCE');
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ longres := 136;
|
|
|
+ longcnt := -13;
|
|
|
+ longres := longres div longcnt;
|
|
|
+ Write('Value should be -10...');
|
|
|
+ if longres = -10 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ longres := 10101010;
|
|
|
+ longcnt := -13;
|
|
|
+ longres := longres mod longcnt;
|
|
|
+ Write('Value should be 10...');
|
|
|
+ if longres = 10 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : LOC_REGISTER');
|
|
|
+ { RIGHT : LOC_REGISTER }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ longres := -11111111;
|
|
|
+ longres := longres div getlongcnt;
|
|
|
+ Write('Value should be 1111111...');
|
|
|
+ if longres = 1111111 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REGISTER }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ longres := -1111111;
|
|
|
+ longres := longres mod getlongcnt;
|
|
|
+ Write('Value should be -1...');
|
|
|
+ if longres = -1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REGISTER }
|
|
|
+ longcnt := 2;
|
|
|
+ longres := getlongcnt div longcnt;
|
|
|
+ Write('Value should be -5...');
|
|
|
+ if longres = -5 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REGISTER }
|
|
|
+ longcnt := 3;
|
|
|
+ longres := getlongcnt mod longcnt;
|
|
|
+ Write('Value should be -1...');
|
|
|
+ if longres = -1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { special tests for results }
|
|
|
+ Writeln('special numeric values tests...');
|
|
|
+ longres := $7FFFFFFF;
|
|
|
+ longcnt := $80000000;
|
|
|
+ longres := longres div longcnt;
|
|
|
+ Write('Value should be 0...');
|
|
|
+ if longres = 0 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ Writeln('special numeric values tests...');
|
|
|
+ longres := $7FFFFFFF;
|
|
|
+ longcnt := $80000000;
|
|
|
+ longres := longcnt div longres;
|
|
|
+ Write('Value should be -1...');
|
|
|
+ if longres = -1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+
|
|
|
+{$IFDEF FPC}
|
|
|
+ WriteLn('------------------- CARDINAL -----------------------');
|
|
|
+ { special tests for results }
|
|
|
+ Writeln('special numeric values tests...');
|
|
|
+ cardinalres := $7FFFFFFF;
|
|
|
+ cardinalcnt := $80000000;
|
|
|
+ cardinalres := cardinalres div cardinalcnt;
|
|
|
+ Write('Value should be 0...');
|
|
|
+ if cardinalres = 0 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ Writeln('special numeric values tests...');
|
|
|
+ cardinalres := $7FFFFFFF;
|
|
|
+ cardinalcnt := $80000000;
|
|
|
+ cardinalres := cardinalcnt div cardinalres;
|
|
|
+ Write('Value should be 1...');
|
|
|
+ if cardinalres = 1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : ordinal constant');
|
|
|
+ { RIGHT : power of 2 ordconstn }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ cardinalres := 24;
|
|
|
+ cardinalres := cardinalres div 4;
|
|
|
+ Write('Value should be 6...');
|
|
|
+ if cardinalres = 6 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : power of 2 ordconstn }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ cardinalres := 24;
|
|
|
+ cardinalres := cardinalres mod 4;
|
|
|
+ Write('Value should be 0...');
|
|
|
+ if cardinalres = 0 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : LOC_REFERENCE');
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ cardinalres := 136;
|
|
|
+ cardinalcnt := 13;
|
|
|
+ cardinalres := cardinalres div cardinalcnt;
|
|
|
+ Write('Value should be 10...');
|
|
|
+ if cardinalres = 10 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ cardinalres := 10101010;
|
|
|
+ cardinalcnt := 13;
|
|
|
+ cardinalres := cardinalres mod cardinalcnt;
|
|
|
+ Write('Value should be 10...');
|
|
|
+ if cardinalres = 10 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : LOC_REGISTER');
|
|
|
+ { RIGHT : LOC_REGISTER }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ cardinalres := 11111111;
|
|
|
+ cardinalres := cardinalres div getcardinalcnt;
|
|
|
+ Write('Value should be 1111111...');
|
|
|
+ if cardinalres = 1111111 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REGISTER }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ cardinalres := 1111111;
|
|
|
+ cardinalres := cardinalres mod getcardinalcnt;
|
|
|
+ Write('Value should be 1...');
|
|
|
+ if cardinalres = 1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REGISTER }
|
|
|
+ cardinalcnt := 2;
|
|
|
+ cardinalres := getcardinalcnt div cardinalcnt;
|
|
|
+ Write('Value should be 5...');
|
|
|
+ if cardinalres = 5 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REGISTER }
|
|
|
+ cardinalcnt := 3;
|
|
|
+ cardinalres := getcardinalcnt mod cardinalcnt;
|
|
|
+ Write('Value should be 1...');
|
|
|
+ if cardinalres = 1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ WriteLn('--------------------- INT64 ------------------------');
|
|
|
+ { special tests for results }
|
|
|
+ Writeln('special numeric values tests...');
|
|
|
+ int64res := $7FFFFFFF shl 32;
|
|
|
+ int64cnt := $80000000 shl 32;
|
|
|
+ int64res := int64res div int64cnt;
|
|
|
+ Write('Value should be 0...');
|
|
|
+ if int64res = 0 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ Writeln('special numeric values tests...');
|
|
|
+ int64res := $7FFFFFFF shl 32;
|
|
|
+ int64cnt := $80000000 shl 32;
|
|
|
+ int64res := int64cnt div int64res;
|
|
|
+ Write('Value should be -1...');
|
|
|
+ if int64res = -1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ int64res := $7FFFFFFF;
|
|
|
+ int64cnt := $80000000;
|
|
|
+ int64res := int64res div int64cnt;
|
|
|
+ Write('Value should be 0...');
|
|
|
+ if int64res = 0 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ Writeln('special numeric values tests...');
|
|
|
+ int64res := $7FFFFFFF;
|
|
|
+ int64cnt := $80000000;
|
|
|
+ int64res := int64cnt div int64res;
|
|
|
+ Write('Value should be -1...');
|
|
|
+ if int64res = -1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : ordinal constant');
|
|
|
+ { RIGHT : power of 2 ordconstn }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ int64res := 24;
|
|
|
+ int64res := int64res div 4;
|
|
|
+ Write('Value should be 6...');
|
|
|
+ if int64res = 6 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : power of 2 ordconstn }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ int64res := 24;
|
|
|
+ int64res := int64res mod 4;
|
|
|
+ Write('Value should be 0...');
|
|
|
+ if int64res = 0 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : LOC_REFERENCE');
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ int64res := 136;
|
|
|
+ int64cnt := -13;
|
|
|
+ int64res := int64res div int64cnt;
|
|
|
+ Write('Value should be -10...');
|
|
|
+ if int64res = -10 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ int64res := 10101010;
|
|
|
+ int64cnt := -13;
|
|
|
+ int64res := int64res mod int64cnt;
|
|
|
+ Write('Value should be 10...');
|
|
|
+ if int64res = 10 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ WriteLn('(left) : LOC_REFERENCE; (right) : LOC_REGISTER');
|
|
|
+ { RIGHT : LOC_REGISTER }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ int64res := -11111111;
|
|
|
+ int64res := int64res div getint64cnt;
|
|
|
+ Write('Value should be 1111111...');
|
|
|
+ if int64res = 1111111 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REGISTER }
|
|
|
+ { LEFT : LOC_REFERENCE }
|
|
|
+ int64res := -1111111;
|
|
|
+ int64res := int64res mod getint64cnt;
|
|
|
+ Write('Value should be -1...');
|
|
|
+ if int64res = -1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REGISTER }
|
|
|
+ int64cnt := 2;
|
|
|
+ int64res := getint64cnt div int64cnt;
|
|
|
+ Write('Value should be -5...');
|
|
|
+ if int64res = -5 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+ { RIGHT : LOC_REFERENCE }
|
|
|
+ { LEFT : LOC_REGISTER }
|
|
|
+ int64cnt := 3;
|
|
|
+ int64res := getint64cnt mod int64cnt;
|
|
|
+ Write('Value should be -1...');
|
|
|
+ if int64res = -1 then
|
|
|
+ WriteLn('Success.')
|
|
|
+ else
|
|
|
+ WriteLn('Failure.');
|
|
|
+
|
|
|
+
|
|
|
+ WriteLn('--------------------- QWORD ------------------------');
|
|
|
+{$ENDIF}
|
|
|
+end.
|