tnot.pp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. {****************************************************************}
  2. { CODE GENERATOR TEST PROGRAM }
  3. {****************************************************************}
  4. { NODE TESTED : secondnot() }
  5. {****************************************************************}
  6. { PRE-REQUISITES: secondload() }
  7. { secondassign() }
  8. {****************************************************************}
  9. { DEFINES: VERBOSE = Write test information to screen }
  10. { FPC = Target is FreePascal compiler }
  11. {****************************************************************}
  12. { REMARKS: }
  13. { }
  14. { }
  15. { }
  16. {****************************************************************}
  17. Program tnot;
  18. {----------------------------------------------------}
  19. { Cases to test: }
  20. { CURRENT NODE (result) }
  21. { - LOC_REGISTER }
  22. { - LOC_FLAGS }
  23. { LEFT NODE (value to complement) }
  24. { possible cases : int64,byte,word,longint }
  25. { boolean }
  26. { - LOC_CREGISTER }
  27. { - LOC_REFERENCE / LOC_MEM }
  28. { - LOC_REGISTER }
  29. { - LOC_FLAGS }
  30. { - LOC_JUMP }
  31. {----------------------------------------------------}
  32. {$IFNDEF FPC}
  33. type smallint = integer;
  34. {$ENDIF}
  35. function getintres : smallint;
  36. begin
  37. getintres := $7F7F;
  38. end;
  39. function getbyteboolval : boolean;
  40. begin
  41. getbyteboolval := TRUE;
  42. end;
  43. var
  44. longres : longint;
  45. intres : smallint;
  46. byteboolval : bytebool;
  47. wordboolval : wordbool;
  48. longboolval : longbool;
  49. byteboolres : bytebool;
  50. wordboolres : wordbool;
  51. longboolres : longbool;
  52. {$ifdef fpc}
  53. int64res : int64;
  54. {$endif}
  55. Begin
  56. WriteLn('------------------------------ LONGINT --------------------------------');
  57. { CURRENT NODE: REGISTER }
  58. { LEFT NODE : REFERENCE }
  59. WriteLn('(current) : LOC_REGISTER; (left) : LOC_REFERENCE');
  60. longres := $7F7F7F7F;
  61. longres := not longres;
  62. Write('Value should be $80808080...');
  63. if longres = $80808080 then
  64. WriteLn('Success.')
  65. else
  66. WriteLn('Failure.');
  67. { CURRENT NODE : REGISTER }
  68. { LEFT NODE : REGISTER }
  69. WriteLn('(current) : LOC_REGISTER; (left) : LOC_REGISTER');
  70. longres := not getintres;
  71. Write('Value should be $8080...');
  72. if longres = $FFFF8080 then
  73. WriteLn('Success.')
  74. else
  75. WriteLn('Failure.');
  76. WriteLn('----------------------------- BOOLEAN -----------------------------------');
  77. { CURRENT NODE : LOC_REGISTER }
  78. { LEFT NODE : LOC_REFERENCE }
  79. WriteLn('(current) : LOC_REGISTER; (left) : LOC_REFERENCE');
  80. byteboolval := TRUE;
  81. byteboolres := not byteboolval;
  82. Write('Value should be FALSE...');
  83. if byteboolres = FALSE then
  84. WriteLn('Success.')
  85. else
  86. WriteLn('Failure.');
  87. wordboolval := TRUE;
  88. wordboolres := not wordboolval;
  89. Write('Value should be FALSE...');
  90. if wordboolres = FALSE then
  91. WriteLn('Success.')
  92. else
  93. WriteLn('Failure.');
  94. longboolval := TRUE;
  95. longboolres := not longboolval;
  96. Write('Value should be FALSE...');
  97. if longboolres = FALSE then
  98. WriteLn('Success.')
  99. else
  100. WriteLn('Failure.');
  101. { CURRENT NODE : LOC_REGISTER }
  102. { LEFT NODE : LOC_REGISTER }
  103. WriteLn('(current) : LOC_REGISTER; (left) : LOC_REGISTER');
  104. longboolres := not getbyteboolval;
  105. Write('Value should be FALSE...');
  106. if longboolres = FALSE then
  107. WriteLn('Success.')
  108. else
  109. WriteLn('Failure.');
  110. { CURRENT NODE : LOC_FLAGS }
  111. { LEFT NODE : LOC_FLAGS }
  112. WriteLn('(current) : LOC_FLAGS; (left) : LOC_FLAGS');
  113. intres := 1;
  114. byteboolres := TRUE;
  115. byteboolres:= not ((intres = 1));
  116. Write('Value should be FALSE...');
  117. if byteboolres = FALSE then
  118. WriteLn('Success.')
  119. else
  120. WriteLn('Failure.');
  121. { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
  122. { CURRENT_NODE : LOC_JUMP }
  123. { ???????????????????????}
  124. { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
  125. { CURRENT_NODE : LOC_FLAGS }
  126. { LEFT NODE : <> LOC_FLAGS }
  127. { !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! }
  128. {$IFDEF FPC}
  129. WriteLn('------------------------------ INT64 ----------------------------------');
  130. { CURRENT NODE: REGISTER }
  131. { LEFT NODE : REFERENCE }
  132. WriteLn('(current) : LOC_REGISTER; (left) : LOC_REFERENCE');
  133. int64res := $7F7F7F7F;
  134. int64res := not int64res;
  135. Write('Value should be $80808080...');
  136. if int64res = $80808080 then
  137. WriteLn('Success.')
  138. else
  139. WriteLn('Failure.');
  140. { CURRENT NODE : REGISTER }
  141. { LEFT NODE : REGISTER }
  142. WriteLn('(current) : LOC_REGISTER; (left) : LOC_REGISTER');
  143. int64res := not (word(getintres));
  144. Write('Value should be $8080...');
  145. if int64res = $00008080 then
  146. WriteLn('Success.')
  147. else
  148. WriteLn('Failure.');
  149. {$ENDIF}
  150. end.