head     56.3;
access   paws bayes jws quist brad dew jwh;
symbols  ;
locks    ; strict;
comment  @# @;


56.3
date     93.01.27.13.34.54;  author jwh;  state Exp;
branches ;
next     56.2;

56.2
date     93.01.27.12.11.09;  author jwh;  state Exp;
branches ;
next     56.1;

56.1
date     91.11.05.09.24.59;  author jwh;  state Exp;
branches ;
next     55.1;

55.1
date     91.08.25.10.02.14;  author jwh;  state Exp;
branches ;
next     54.1;

54.1
date     91.03.18.15.12.33;  author jwh;  state Exp;
branches ;
next     53.1;

53.1
date     91.03.11.19.13.30;  author jwh;  state Exp;
branches ;
next     52.1;

52.1
date     91.02.19.08.58.40;  author jwh;  state Exp;
branches ;
next     51.1;

51.1
date     91.01.30.15.57.35;  author jwh;  state Exp;
branches ;
next     50.1;

50.1
date     90.10.29.16.10.27;  author jwh;  state Exp;
branches ;
next     49.1;

49.1
date     90.08.14.13.59.40;  author jwh;  state Exp;
branches ;
next     48.1;

48.1
date     90.07.26.11.05.04;  author jwh;  state Exp;
branches ;
next     47.1;

47.1
date     90.05.14.10.38.54;  author dew;  state Exp;
branches ;
next     46.1;

46.1
date     90.05.07.08.28.51;  author jwh;  state Exp;
branches ;
next     45.1;

45.1
date     90.04.19.15.35.55;  author jwh;  state Exp;
branches ;
next     44.1;

44.1
date     90.04.01.21.53.32;  author jwh;  state Exp;
branches ;
next     43.1;

43.1
date     90.03.20.13.43.24;  author jwh;  state Exp;
branches ;
next     42.1;

42.1
date     90.01.23.17.28.42;  author jwh;  state Exp;
branches ;
next     41.1;

41.1
date     89.12.22.11.11.23;  author jwh;  state Exp;
branches ;
next     40.2;

40.2
date     89.11.21.09.27.43;  author jwh;  state Exp;
branches ;
next     40.1;

40.1
date     89.09.29.11.34.32;  author jwh;  state Exp;
branches ;
next     39.1;

39.1
date     89.09.26.16.19.57;  author dew;  state Exp;
branches ;
next     38.1;

38.1
date     89.08.29.11.09.54;  author jwh;  state Exp;
branches ;
next     37.1;

37.1
date     89.05.12.11.22.44;  author dew;  state Exp;
branches ;
next     36.1;

36.1
date     89.02.06.10.01.53;  author dew;  state Exp;
branches ;
next     35.1;

35.1
date     89.02.02.13.11.20;  author dew;  state Exp;
branches ;
next     34.1;

34.1
date     89.01.23.15.47.29;  author jwh;  state Exp;
branches ;
next     33.1;

33.1
date     89.01.16.11.23.59;  author dew;  state Exp;
branches ;
next     32.1;

32.1
date     89.01.10.11.28.33;  author bayes;  state Exp;
branches ;
next     31.1;

31.1
date     88.12.14.17.49.28;  author bayes;  state Exp;
branches ;
next     30.1;

30.1
date     88.12.09.13.27.56;  author dew;  state Exp;
branches ;
next     29.1;

29.1
date     88.10.31.15.12.15;  author bayes;  state Exp;
branches ;
next     28.1;

28.1
date     88.10.06.10.42.55;  author dew;  state Exp;
branches ;
next     27.1;

27.1
date     88.09.29.11.04.20;  author bayes;  state Exp;
branches ;
next     26.1;

26.1
date     88.09.28.12.16.21;  author bayes;  state Exp;
branches ;
next     25.1;

25.1
date     88.03.02.08.57.41;  author bayes;  state Exp;
branches ;
next     24.1;

24.1
date     87.08.31.08.55.39;  author jws;  state Exp;
branches ;
next     23.1;

23.1
date     87.08.26.09.32.13;  author bayes;  state Exp;
branches ;
next     22.1;

22.1
date     87.08.17.10.08.59;  author bayes;  state Exp;
branches ;
next     21.1;

21.1
date     87.08.12.12.58.08;  author bayes;  state Exp;
branches ;
next     20.1;

20.1
date     87.07.30.10.08.56;  author bayes;  state Exp;
branches ;
next     19.1;

19.1
date     87.06.01.07.30.30;  author jws;  state Exp;
branches ;
next     18.1;

18.1
date     87.05.20.14.21.12;  author bayes;  state Exp;
branches ;
next     17.1;

17.1
date     87.04.30.09.38.50;  author jws;  state Exp;
branches ;
next     16.1;

16.1
date     87.04.26.14.55.56;  author jws;  state Exp;
branches ;
next     15.1;

15.1
date     87.04.13.08.18.11;  author jws;  state Exp;
branches ;
next     14.1;

14.1
date     87.04.01.14.02.20;  author jws;  state Exp;
branches ;
next     13.1;

13.1
date     87.02.28.17.48.21;  author jws;  state Exp;
branches ;
next     12.1;

12.1
date     87.02.02.12.32.45;  author jws;  state Exp;
branches ;
next     11.1;

11.1
date     87.01.19.08.59.14;  author jws;  state Exp;
branches ;
next     10.1;

10.1
date     86.12.24.10.02.29;  author jws;  state Exp;
branches ;
next     9.1;

9.1
date     86.12.12.13.19.03;  author bayes;  state Exp;
branches ;
next     8.1;

8.1
date     86.11.27.11.00.36;  author jws;  state Exp;
branches ;
next     7.1;

7.1
date     86.11.20.12.45.58;  author hal;  state Exp;
branches ;
next     6.1;

6.1
date     86.11.04.16.41.20;  author paws;  state Exp;
branches ;
next     5.1;

5.1
date     86.10.28.14.01.19;  author hal;  state Exp;
branches ;
next     4.1;

4.1
date     86.09.30.18.26.18;  author hal;  state Exp;
branches ;
next     3.1;

3.1
date     86.09.01.11.13.22;  author hal;  state Exp;
branches ;
next     2.1;

2.1
date     86.07.30.14.01.50;  author hal;  state Exp;
branches ;
next     1.1;

1.1
date     86.06.30.12.52.03;  author danm;  state tmp;
branches ;
next     ;


desc
@Base file for PWS 3.2 release.

@


56.3
log
@
pws2rcs automatic delta on Wed Jan 27 13:14:25 MST 1993
@
text
@
$if mc68881$

procedure fpcodegen;

$include 'M68KFORM'$

begin
 if (currop.class >= fpbase) and
	(currop.class <= fpgentop) then
  begin                                         (* "general" class *)
     codelength := 4;
     code.fptype1.cp_id := default_cpid;
     code.int[ 2 ] := 0;                (* clear cmd word *)
     if (currop.class = (fpbase+0))
	and (currop.name[ 6 ] = 'M')
	and (operand1.mode <> 9)
	and (operand2.mode <> 9) then
       begin                            (* FMOVEM for FPn's *)
	with code.fptype1 do
	 if (operand1.mode = 7) and (operand1.reg = 4) then
	   begin                                (* <reglist,<ea> *)
	     opclass := 7;
	     if operand2.mode = 4 then
	       rx := 0
	     else
	       rx := 4;
	     code.byt[ 4 ] := operand1.value.offset.byte4;
	     buildea( operand2, 3, code.idx[ 3 ] );
	   end
	 else
	   if operand1.mode = 0 then
	     begin                              (* Dn,<ea> *)
	       opclass := 7;
	       if operand2.mode = 4 then
		 rx := 2
	       else
		 rx := 6;
	       extension := operand1.reg * 16;
	       buildea( operand2, 3, code.idx[ 3 ] );
	     end
	   else
	     if (operand2.mode = 7) and (operand2.reg = 4) then
	       begin                            (* <ea>,<reglist> *)
		 opclass := 6;
		 rx := 4;
		 code.byt[ 4 ] := operand2.value.offset.byte4;
		 buildea( operand1, 3, code.idx[ 3 ] );
	       end
	     else
	       if operand2.mode = 0 then
		 begin                          (* <ea>,Dn *)
		   opclass := 6;
		   rx := 6;
		   extension := operand2.reg * 16;
		   buildea( operand1, 3, code.idx[ 3 ] );
		 end
	       else
		 error( errfpinternalerr );
       end                              (* FMOVEM for FPn's *)
     else                               (* more general "general" class *)

       if (operand1.mode = 8) and (operand2.mode = 8) then
	 begin                          (* FPn, FPm *)
	   code.fptype1.opclass := 0;
	   code.fptype1.rx := operand1.reg;
	   code.fptype1.ry := operand2.reg;
	   code.fptype1.extension := (currop.class - fpbase);
	   if currop.class = (fpbase+48) then
	     begin                              (* FSINCOS *)
	       if operand3.mode <> 8 then
		 error( errfpinternalerr );
	       code.fptype1.extension :=
			  code.fptype1.extension + operand3.reg;
	     end;
	  end
	else if operand1.mode = 8 then
	  begin                         (* FPn, <ea> *)
	    code.fptype1.opclass := 3;
	    code.fptype1.rx := fpform( operand2, true, false );
	    code.fptype1.ry := operand1.reg;
	    if operand3.mode = 0 then           (* BCD, <k> in Dn *)
	      begin
		code.fptype1.rx := 7;
		if operand3.mode <> 0 then
		  error( errfpinternalerr );
		code.fptype1.extension := 16 * operand3.reg;
	      end
	    else
	      if (operand3.mode = 7) and (operand3.reg = 4) then
		 begin                          (* BCD,  static <k> *)
		   code.fptype1.extension :=
			  operand3.value.offset.longint;
		 end
	      else
		code.fptype1.extension := 0;
	    buildea( operand2, 3, code.idx[ 3 ] );
	  end                           (* FPn, <ea> *)
	else if operand2.mode = 8 then
	  begin                         (* <ea>, FPn *)
	    code.fptype1.opclass := 2;
	    code.fptype1.ry := operand2.reg;
	    if (currop.class = (fpbase+0)) and (currop.name[ 6 ] = 'C')
		  and (currop.name[ 7 ] = 'R') then
	      begin                             (* movecr *)
		code.fptype1.rx := 7;
		code.fptype1.extension := operand1.value.offset.longint;
	      end
	    else
	      begin
		code.fptype1.rx := fpform( operand1, true, true );
		code.fptype1.extension := (currop.class - fpbase);
		if currop.class = (fpbase+48) then
		  begin                         (* FSINCOS *)
		    if operand3.mode <> 8 then
		      error( errfpinternalerr );
		    code.fptype1.extension :=
			       code.fptype1.extension + operand3.reg;
		  end;
		buildea( operand1, 3, code.idx[ 3 ] );
	      end;
	  end
	else if operand1.mode = 9 then  (* CONTROL/STATUS/IADDR,<ea> *)
	  begin
	    code.fptype1.opclass := 5;
	    if fpsysflag = 0 then
	      error( errfpinternalerr );
	    code.fptype1.rx := fpsysflag;
	    buildea( operand2, 3, code.idx[ 3 ] );
	  end
	else if operand2.mode = 9 then  (* <ea>,CONTROL/STATUS/IADDR *)
	  begin
	    code.fptype1.opclass := 4;
	    if fpsysflag = 0 then
	      error( errfpinternalerr );
	    code.fptype1.rx := fpsysflag;
	    buildea( operand1, 3, code.idx[ 3 ] );
	  end
	else
	  error( errfpinternalerr );
   {------------------------------------------------------------------}
   { 11/20/89 JWH }
   { Fix the extension word if we had an explicitly forced
   { single or double precision rounding instruction. 68040 only.     }
   { Also for the fmove instruction, we require that the dest.
   { be an FPn. Otherwise just use the standard version of fmove,
   { i.e. don't alter the extension word. }

   case currop.class of
    256,280,282,290,291 : {FMOVE,FABS,FNEG,FADD,FMUL}
	 begin { FMOVE, etc. }
	  if ((currop.class <> 256 ) or (operand2.mode = 8)) then
	  begin
	  if currop.name[2] = 'S' then  { really FSMOVE, etc. }
	    code.fptype1.extension :=  code.fptype1.extension + 64
	  else if currop.name[2] = 'D' then { really FDMOVE, etc. }
	    code.fptype1.extension := code.fptype1.extension + 68;
	  end;
	 end;
    288 : begin { FDIV }
	  if currop.name[2] = 'S' then  { really FSDIV, etc. }
	    code.fptype1.extension := 96
	  else if currop.name[3] = 'D' then { really FDDIV }
	    code.fptype1.extension := 100;
	 end;
    260 : begin { FSQRT }
	  if currop.name[2] = 'D' then  { really FDSQRT }
	    code.fptype1.extension := 69
	  else if currop.name[3] = 'S' then { really FSSQRT }
	    code.fptype1.extension := 65;
	 end;
    296 : begin { FSUB }
	  if currop.name[2] = 'D' then  { really FDSUB }
	    code.fptype1.extension := 108
	  else if currop.name[3] = 'S' then { really FSSUB }
	    code.fptype1.extension := 104;
	 end;
    otherwise ;
   end; { CASE }
  {----------------------------------------------------------------}
  end                                           (* "general" class *)

else if (currop.class >= (fpbase+fpbrbase)) and
	(currop.class <= (fpbase+fpbrbase+31)) then
   begin                                (* FDBcc, FScc, FTcc, and FTPcc *)
     codelength := 4;
     code.fptype1.cp_id := default_cpid;
     code.int[ 2 ] := 0;
     code.fptype1.extension := currop.class - (fpbase+fpbrbase);
     if currop.code = -4024 then        (* FDBcc *)
       begin
	 code.type2.regy := operand1.reg;
	 code.int[ 3 ] := operand2.value.offset.lohalf;
	 codelength := codelength + 2;
	 operand2.size:=2;      (* kludges for branches *)
	 operand2.mode:=7;      (* kludges for branches *)
	 operand2.reg :=2;      (* kludges for branches *)
	 dolinkxtref(operand2,4,true,exwordaddr);
       end
     else if currop.code = -4032 then   (* FScc *)
       begin
	 buildea( operand1, 3, code.idx[ 3 ] );
       end
     else if currop.code = -3974 then   (* FTPcc *)
       begin
	 if operand1.size <= 2 then
	   begin
	     code.int[ 3 ] := operand1.value.offset.lohalf;
	     codelength := codelength + 2;
	   end
	 else
	   begin
	     code.int[ 1 ] := code.int[ 1 ] + 1;
	     code.int[ 3 ] := operand1.value.offset.hihalf;
	     code.int[ 4 ] := operand1.value.offset.lohalf;
	     codelength := codelength + 4;
	   end;
	 dolinkxtref(operand1,4,false,exwordaddr);
       end;
   end                                  (* FDBcc, FScc, FTcc, and FTPcc *)

 else if currop.class = (fpbase+fpbrbase+32) then
   begin                                                (* FBcc *)
    codelength := 4;
    code.fptype1.cp_id := default_cpid;
    if operand1.size = 2 then    (* 16 bit displacement *)
      begin
	code.int[ 2 ] := operand1.value.offset.lohalf;
      end
    else                (* 32 bit displacement *)
      begin
	if operand1.size <> 4 then
	  error( errfpinternalerr );
	code.int[ 1 ] := code.int[ 1 ] + 64;
	code.int[ 2 ] := operand1.value.offset.hihalf;
	code.int[ 3 ] := operand1.value.offset.lohalf;
	codelength := codelength + 2;
      end;
    if ( operand1.value.exprefs <> NIL )
	or ( ( operand1.value.base = absolut ) and ( pcmode = rel) )
	or ( ( operand1.value.base = relative ) and ( pcmode= abs ) )
	then
      begin
	operand1.mode := 7;
	operand1.reg := 2;      (* what about 32 bit displ ??? *)
	linkpatch := true;
	dolinkxtref( operand1, 2, linkpatch, exwordaddr );
      end;
   end                                                  (* FBcc *)

 else if (currop.class = (fpbase+fpbrbase+33)) or
     (currop.class = (fpbase+fpbrbase+34)) then
   begin                                        (* FSAVE and FRESTORE *)
     codelength := 2;
     code.fptype1.cp_id := default_cpid;
     buildea( operand1, 2, code.idx[ 2 ] );
   end                                          (* FSAVE and FRESTORE *)

 else if currop.class = (fpbase+fpbrbase+35) then
   begin                                                (* FNOP *)
     codelength := 4;
     code.fptype1.cp_id := default_cpid;
     code.int[ 2 ] := 0;
   end                                                  (* FNOP *)

  else
    begin
      error( errfpinternalerr );
    end;

end;    (* fpcodegen *)
$end$
@


56.2
log
@
pws2rcs automatic delta on Wed Jan 27 11:57:27 MST 1993
@
text
@d1 272
@


56.1
log
@Automatic bump of revision number for PWS version 3.25
@
text
@a0 272

$if mc68881$

procedure fpcodegen;

$include 'M68KFORM'$

begin
 if (currop.class >= fpbase) and
	(currop.class <= fpgentop) then
  begin                                         (* "general" class *)
     codelength := 4;
     code.fptype1.cp_id := default_cpid;
     code.int[ 2 ] := 0;                (* clear cmd word *)
     if (currop.class = (fpbase+0))
	and (currop.name[ 6 ] = 'M')
	and (operand1.mode <> 9)
	and (operand2.mode <> 9) then
       begin                            (* FMOVEM for FPn's *)
	with code.fptype1 do
	 if (operand1.mode = 7) and (operand1.reg = 4) then
	   begin                                (* <reglist,<ea> *)
	     opclass := 7;
	     if operand2.mode = 4 then
	       rx := 0
	     else
	       rx := 4;
	     code.byt[ 4 ] := operand1.value.offset.byte4;
	     buildea( operand2, 3, code.idx[ 3 ] );
	   end
	 else
	   if operand1.mode = 0 then
	     begin                              (* Dn,<ea> *)
	       opclass := 7;
	       if operand2.mode = 4 then
		 rx := 2
	       else
		 rx := 6;
	       extension := operand1.reg * 16;
	       buildea( operand2, 3, code.idx[ 3 ] );
	     end
	   else
	     if (operand2.mode = 7) and (operand2.reg = 4) then
	       begin                            (* <ea>,<reglist> *)
		 opclass := 6;
		 rx := 4;
		 code.byt[ 4 ] := operand2.value.offset.byte4;
		 buildea( operand1, 3, code.idx[ 3 ] );
	       end
	     else
	       if operand2.mode = 0 then
		 begin                          (* <ea>,Dn *)
		   opclass := 6;
		   rx := 6;
		   extension := operand2.reg * 16;
		   buildea( operand1, 3, code.idx[ 3 ] );
		 end
	       else
		 error( errfpinternalerr );
       end                              (* FMOVEM for FPn's *)
     else                               (* more general "general" class *)

       if (operand1.mode = 8) and (operand2.mode = 8) then
	 begin                          (* FPn, FPm *)
	   code.fptype1.opclass := 0;
	   code.fptype1.rx := operand1.reg;
	   code.fptype1.ry := operand2.reg;
	   code.fptype1.extension := (currop.class - fpbase);
	   if currop.class = (fpbase+48) then
	     begin                              (* FSINCOS *)
	       if operand3.mode <> 8 then
		 error( errfpinternalerr );
	       code.fptype1.extension :=
			  code.fptype1.extension + operand3.reg;
	     end;
	  end
	else if operand1.mode = 8 then
	  begin                         (* FPn, <ea> *)
	    code.fptype1.opclass := 3;
	    code.fptype1.rx := fpform( operand2, true, false );
	    code.fptype1.ry := operand1.reg;
	    if operand3.mode = 0 then           (* BCD, <k> in Dn *)
	      begin
		code.fptype1.rx := 7;
		if operand3.mode <> 0 then
		  error( errfpinternalerr );
		code.fptype1.extension := 16 * operand3.reg;
	      end
	    else
	      if (operand3.mode = 7) and (operand3.reg = 4) then
		 begin                          (* BCD,  static <k> *)
		   code.fptype1.extension :=
			  operand3.value.offset.longint;
		 end
	      else
		code.fptype1.extension := 0;
	    buildea( operand2, 3, code.idx[ 3 ] );
	  end                           (* FPn, <ea> *)
	else if operand2.mode = 8 then
	  begin                         (* <ea>, FPn *)
	    code.fptype1.opclass := 2;
	    code.fptype1.ry := operand2.reg;
	    if (currop.class = (fpbase+0)) and (currop.name[ 6 ] = 'C')
		  and (currop.name[ 7 ] = 'R') then
	      begin                             (* movecr *)
		code.fptype1.rx := 7;
		code.fptype1.extension := operand1.value.offset.longint;
	      end
	    else
	      begin
		code.fptype1.rx := fpform( operand1, true, true );
		code.fptype1.extension := (currop.class - fpbase);
		if currop.class = (fpbase+48) then
		  begin                         (* FSINCOS *)
		    if operand3.mode <> 8 then
		      error( errfpinternalerr );
		    code.fptype1.extension :=
			       code.fptype1.extension + operand3.reg;
		  end;
		buildea( operand1, 3, code.idx[ 3 ] );
	      end;
	  end
	else if operand1.mode = 9 then  (* CONTROL/STATUS/IADDR,<ea> *)
	  begin
	    code.fptype1.opclass := 5;
	    if fpsysflag = 0 then
	      error( errfpinternalerr );
	    code.fptype1.rx := fpsysflag;
	    buildea( operand2, 3, code.idx[ 3 ] );
	  end
	else if operand2.mode = 9 then  (* <ea>,CONTROL/STATUS/IADDR *)
	  begin
	    code.fptype1.opclass := 4;
	    if fpsysflag = 0 then
	      error( errfpinternalerr );
	    code.fptype1.rx := fpsysflag;
	    buildea( operand1, 3, code.idx[ 3 ] );
	  end
	else
	  error( errfpinternalerr );
   {------------------------------------------------------------------}
   { 11/20/89 JWH }
   { Fix the extension word if we had an explicitly forced
   { single or double precision rounding instruction. 68040 only.     }
   { Also for the fmove instruction, we require that the dest.
   { be an FPn. Otherwise just use the standard version of fmove,
   { i.e. don't alter the extension word. }

   case currop.class of
    256,280,282,290,291 : {FMOVE,FABS,FNEG,FADD,FMUL}
	 begin { FMOVE, etc. }
	  if ((currop.class <> 256 ) or (operand2.mode = 8)) then
	  begin
	  if currop.name[2] = 'S' then  { really FSMOVE, etc. }
	    code.fptype1.extension :=  code.fptype1.extension + 64
	  else if currop.name[2] = 'D' then { really FDMOVE, etc. }
	    code.fptype1.extension := code.fptype1.extension + 68;
	  end;
	 end;
    288 : begin { FDIV }
	  if currop.name[2] = 'S' then  { really FSDIV, etc. }
	    code.fptype1.extension := 96
	  else if currop.name[3] = 'D' then { really FDDIV }
	    code.fptype1.extension := 100;
	 end;
    260 : begin { FSQRT }
	  if currop.name[2] = 'D' then  { really FDSQRT }
	    code.fptype1.extension := 69
	  else if currop.name[3] = 'S' then { really FSSQRT }
	    code.fptype1.extension := 65;
	 end;
    296 : begin { FSUB }
	  if currop.name[2] = 'D' then  { really FDSUB }
	    code.fptype1.extension := 108
	  else if currop.name[3] = 'S' then { really FSSUB }
	    code.fptype1.extension := 104;
	 end;
    otherwise ;
   end; { CASE }
  {----------------------------------------------------------------}
  end                                           (* "general" class *)

else if (currop.class >= (fpbase+fpbrbase)) and
	(currop.class <= (fpbase+fpbrbase+31)) then
   begin                                (* FDBcc, FScc, FTcc, and FTPcc *)
     codelength := 4;
     code.fptype1.cp_id := default_cpid;
     code.int[ 2 ] := 0;
     code.fptype1.extension := currop.class - (fpbase+fpbrbase);
     if currop.code = -4024 then        (* FDBcc *)
       begin
	 code.type2.regy := operand1.reg;
	 code.int[ 3 ] := operand2.value.offset.lohalf;
	 codelength := codelength + 2;
	 operand2.size:=2;      (* kludges for branches *)
	 operand2.mode:=7;      (* kludges for branches *)
	 operand2.reg :=2;      (* kludges for branches *)
	 dolinkxtref(operand2,4,true,exwordaddr);
       end
     else if currop.code = -4032 then   (* FScc *)
       begin
	 buildea( operand1, 3, code.idx[ 3 ] );
       end
     else if currop.code = -3974 then   (* FTPcc *)
       begin
	 if operand1.size <= 2 then
	   begin
	     code.int[ 3 ] := operand1.value.offset.lohalf;
	     codelength := codelength + 2;
	   end
	 else
	   begin
	     code.int[ 1 ] := code.int[ 1 ] + 1;
	     code.int[ 3 ] := operand1.value.offset.hihalf;
	     code.int[ 4 ] := operand1.value.offset.lohalf;
	     codelength := codelength + 4;
	   end;
	 dolinkxtref(operand1,4,false,exwordaddr);
       end;
   end                                  (* FDBcc, FScc, FTcc, and FTPcc *)

 else if currop.class = (fpbase+fpbrbase+32) then
   begin                                                (* FBcc *)
    codelength := 4;
    code.fptype1.cp_id := default_cpid;
    if operand1.size = 2 then    (* 16 bit displacement *)
      begin
	code.int[ 2 ] := operand1.value.offset.lohalf;
      end
    else                (* 32 bit displacement *)
      begin
	if operand1.size <> 4 then
	  error( errfpinternalerr );
	code.int[ 1 ] := code.int[ 1 ] + 64;
	code.int[ 2 ] := operand1.value.offset.hihalf;
	code.int[ 3 ] := operand1.value.offset.lohalf;
	codelength := codelength + 2;
      end;
    if ( operand1.value.exprefs <> NIL )
	or ( ( operand1.value.base = absolut ) and ( pcmode = rel) )
	or ( ( operand1.value.base = relative ) and ( pcmode= abs ) )
	then
      begin
	operand1.mode := 7;
	operand1.reg := 2;      (* what about 32 bit displ ??? *)
	linkpatch := true;
	dolinkxtref( operand1, 2, linkpatch, exwordaddr );
      end;
   end                                                  (* FBcc *)

 else if (currop.class = (fpbase+fpbrbase+33)) or
     (currop.class = (fpbase+fpbrbase+34)) then
   begin                                        (* FSAVE and FRESTORE *)
     codelength := 2;
     code.fptype1.cp_id := default_cpid;
     buildea( operand1, 2, code.idx[ 2 ] );
   end                                          (* FSAVE and FRESTORE *)

 else if currop.class = (fpbase+fpbrbase+35) then
   begin                                                (* FNOP *)
     codelength := 4;
     code.fptype1.cp_id := default_cpid;
     code.int[ 2 ] := 0;
   end                                                  (* FNOP *)

  else
    begin
      error( errfpinternalerr );
    end;

end;    (* fpcodegen *)
$end$
@


55.1
log
@Automatic bump of revision number for PWS version 3.25A
@
text
@@


54.1
log
@Automatic bump of revision number for PWS version 3.24
@
text
@@


53.1
log
@Automatic bump of revision number for PWS version 3.24B
@
text
@@


52.1
log
@Automatic bump of revision number for PWS version 3.24A
@
text
@@


51.1
log
@Automatic bump of revision number for PWS version 3.24d
@
text
@@


50.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@@


49.1
log
@Automatic bump of revision number for PWS version 3.24b
@
text
@@


48.1
log
@Automatic bump of revision number for PWS version 3.24a
@
text
@@


47.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


46.1
log
@Automatic bump of revision number for PWS version 3.23
@
text
@@


45.1
log
@Automatic bump of revision number for PWS version 3.23C
@
text
@@


44.1
log
@Automatic bump of revision number for PWS version 3.23B
@
text
@@


43.1
log
@Automatic bump of revision number for PWS version 3.23aA
@
text
@@


42.1
log
@Automatic bump of revision number for PWS version 3.23e
@
text
@@


41.1
log
@Automatic bump of revision number for PWS version 3.23d
@
text
@@


40.2
log
@

      Added code to handle the explicitly forced single and
   double precision rounding versions of FMOVE, FABS, FNEG,
   FADD, FMUL, FSQRT, FSUB, and FDIV. The only other change
   required is in OPINITFP, where the actual new opcodes
   themselves are added. These new versions are valid only
   on the 68040.
@
text
@@


40.1
log
@Automatic bump of revision number for PWS version 3.23c
@
text
@d141 40
@


39.1
log
@Automatic bump of revision number for PWS version 3.23b
@
text
@@


38.1
log
@Automatic bump of revision number for PWS version 3.23a
@
text
@@


37.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


36.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


35.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


34.1
log
@Automatic bump of revision number for PWS version 3.22
@
text
@@


33.1
log
@Automatic bump of revision number for PWS version 3.22D
@
text
@@


32.1
log
@Automatic bump of revision number for PWS version 3.22C
@
text
@@


31.1
log
@Automatic bump of revision number for PWS version 3.22B
@
text
@@


30.1
log
@Automatic bump of revision number for PWS version 3.22A
@
text
@@


29.1
log
@Automatic bump of revision number for PWS version 3.22b
@
text
@@


28.1
log
@Automatic bump of revision number for PWS version 3.3b
@
text
@@


27.1
log
@Automatic bump of revision number for PWS version 3.3a
@
text
@@


26.1
log
@Automatic bump of revision number for PWS version 3.3 Synch
@
text
@@


25.1
log
@Automatic bump of revision number for PWS version 3.2Y
@
text
@@


24.1
log
@Automatic bump of revision number for PWS version 3.2
@
text
@@


23.1
log
@Automatic bump of revision number for PWS version 3.2P
@
text
@@


22.1
log
@Automatic bump of revision number for PWS version 3.2N
@
text
@@


21.1
log
@Automatic bump of revision number for PWS version 3.2M
@
text
@@


20.1
log
@Automatic bump of revision number for PWS version 3.2L
@
text
@@


19.1
log
@Automatic bump of revision number for PWS version 3.2K
@
text
@@


18.1
log
@Automatic bump of revision number for PWS version 3.2J
@
text
@@


17.1
log
@Automatic bump of revision number for PWS version 3.2I+
@
text
@@


16.1
log
@Automatic bump of revision number for PWS version 3.2I
@
text
@@


15.1
log
@Automatic bump of revision number for PWS version 3.2H
@
text
@@


14.1
log
@Automatic bump of revision number for PWS version 3.2G
@
text
@@


13.1
log
@Automatic bump of revision number for PWS version 3.2F
@
text
@@


12.1
log
@Automatic bump of revision number for PWS version 3.2E
@
text
@@


11.1
log
@Automatic bump of revision number for PWS version 3.2D
@
text
@@


10.1
log
@Automatic bump of revision number for PWS version 3.2C
@
text
@@


9.1
log
@Automatic bump of revision number for PWS version 3.2B
@
text
@@


8.1
log
@Automatic bump of revision number for PWS version 3.2A
@
text
@@


7.1
log
@Automatic bump of revision number for PWS version 3.2l
@
text
@@


6.1
log
@Automatic bump of revision number for PWS version 3.2k
@
text
@@


5.1
log
@Automatic bump of revision number for PWS version 3.2j
@
text
@@


4.1
log
@Automatic bump of revision number for PWS version 3.2i
@
text
@@


3.1
log
@Automatic bump of revision number for PWS version 3.2h
@
text
@@


2.1
log
@Auto bump rev number to 2.1 for sys 3.2e.
@
text
@@


1.1
log
@Initial revision
@
text
@@
