|
@@ -0,0 +1,52 @@
|
|
|
+const
|
|
|
+RS_CR = $00;
|
|
|
+RS_CR0 = $01;
|
|
|
+RS_CR1 = $02;
|
|
|
+RS_CR2 = $03;
|
|
|
+RS_CR3 = $04;
|
|
|
+RS_CR4 = $05;
|
|
|
+RS_CR5 = $06;
|
|
|
+RS_CR6 = $07;
|
|
|
+RS_CR7 = $08;
|
|
|
+
|
|
|
+ type
|
|
|
+ TAsmCondFlag = (C_None { unconditional jumps },
|
|
|
+ { conditions when not using ctr decrement etc }
|
|
|
+ C_LT,C_LE,C_EQ,C_GE,C_GT,C_NL,C_NE,C_NG,C_SO,C_NS,C_UN,C_NU,
|
|
|
+ { conditions when using ctr decrement etc }
|
|
|
+ C_T,C_F,C_DNZ,C_DNZT,C_DNZF,C_DZ,C_DZT,C_DZF);
|
|
|
+
|
|
|
+ TDirHint = (DH_None,DH_Minus,DH_Plus);
|
|
|
+
|
|
|
+ type
|
|
|
+ TAsmCond = bitpacked record
|
|
|
+ dirhint : tdirhint;
|
|
|
+ case simple: boolean of
|
|
|
+ false: (BO, BI: 0..31);
|
|
|
+ true: (
|
|
|
+ cond: TAsmCondFlag;
|
|
|
+ case byte of
|
|
|
+ 0: ();
|
|
|
+ { specifies in which part of the cr the bit has to be }
|
|
|
+ { tested for blt,bgt,beq,..,bnu }
|
|
|
+ 1: (cr: RS_CR0..RS_CR7);
|
|
|
+ { specifies the bit to test for bt,bf,bdz,..,bdzf }
|
|
|
+ 2: (crbit: 0..31)
|
|
|
+ );
|
|
|
+ end;
|
|
|
+
|
|
|
+const
|
|
|
+ zerocond: tasmcond = (dirhint: DH_Plus;
|
|
|
+ simple: true;
|
|
|
+ cond:C_NE;
|
|
|
+ cr: RS_CR1);
|
|
|
+
|
|
|
+
|
|
|
+begin
|
|
|
+ with zerocond do
|
|
|
+ if (dirhint <> DH_Plus) or
|
|
|
+ not simple or
|
|
|
+ (cond <> C_NE) or
|
|
|
+ (cr <> RS_CR1) then
|
|
|
+ halt(1);
|
|
|
+end.
|