fpc/tests/test/tprec21.pp
Jonas Maebe 368cd52f97 * fixed bug in typed constant record parsing with variant records
in case a variant part other than the first is initialised (the
    index of the next symbol was not adjusted, causing incorrect error
    messages in case there are some alignment bits/bytes between the
    previous and next field)

git-svn-id: trunk@8948 -
2007-10-26 18:22:30 +00:00

53 lines
1.4 KiB
ObjectPascal

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.