Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/MLRISC/x86/x86.md
ViewVC logotype

Diff of /sml/trunk/src/MLRISC/x86/x86.md

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 555, Fri Mar 3 16:10:30 2000 UTC revision 565, Sun Mar 5 04:10:18 2000 UTC
# Line 52  Line 52 
52                        | (r,_) => "%"^Int.toString r                        | (r,_) => "%"^Int.toString r
53                      )                      )
54     |  FP "f" = 32 cells of 80 bits in cellset called "floating point register"     |  FP "f" = 32 cells of 80 bits in cellset called "floating point register"
55                 assembly as (fn (f,_) =>                 assembly as (fn (0,_) => "%st"
56                                      if f = 0 then "%st"                               | (f,_) =>
57                                      else if f < 8 then "%st("^Int.toString f^")"                                  if f < 8 then "%st("^Int.toString f^")"
58                                      else "%f"^Int.toString f                                      else "%f"^Int.toString f
59                                          (* pseudo register *)                                          (* pseudo register *)
60                             )                             )
# Line 143  Line 143 
143    
144   (* The Intel manual is incorrect on the description of FDIV and FDIVR *)   (* The Intel manual is incorrect on the description of FDIV and FDIVR *)
145    datatype fbinOp! =    datatype fbinOp! =
146        FADDP   | FADDS   | FIADDS        FADDP   | FADDS
147      | FMULP   | FMULS   | FIMULS      | FMULP   | FMULS
148      | FSUBP   | FSUBS   | FISUBS        (* ST(1) := ST-ST(1); [pop] *)                | FCOMS
149      | FSUBRP  | FSUBRS  | FISUBRS       (* ST(1) := ST(1)-ST; [pop] *)                | FCOMPS
150      | FDIVP   | FDIVS   | FIDIVS        (* ST(1) := ST/ST(1); [pop] *)      | FSUBP   | FSUBS   (* ST(1) := ST-ST(1); [pop] *)
151      | FDIVRP  | FDIVRS  | FIDIVRS       (* ST(1) := ST(1)/ST; [pop] *)      | FSUBRP  | FSUBRS  (* ST(1) := ST(1)-ST; [pop] *)
152                | FADDL   | FIADDL      | FDIVP   | FDIVS   (* ST(1) := ST/ST(1); [pop] *)
153                | FMULL   | FIMULL      | FDIVRP  | FDIVRS  (* ST(1) := ST(1)/ST; [pop] *)
154                | FSUBL   | FISUBL        (* ST(1) := ST-ST(1); [pop] *)                | FADDL
155                | FSUBRL  | FISUBRL       (* ST(1) := ST(1)-ST; [pop] *)                | FMULL
156                | FDIVL   | FIDIVL        (* ST(1) := ST/ST(1); [pop] *)                | FCOML
157                | FDIVRL  | FIDIVRL       (* ST(1) := ST(1)/ST; [pop] *)                | FCOMPL
158                  | FSUBL   (* ST(1) := ST-ST(1); [pop] *)
159                  | FSUBRL  (* ST(1) := ST(1)-ST; [pop] *)
160                  | FDIVL   (* ST(1) := ST/ST(1); [pop] *)
161                  | FDIVRL  (* ST(1) := ST(1)/ST; [pop] *)
162    
163      datatype fibinOp! =
164          FIADDS | FIMULS   | FICOMS | FICOMPS
165        | FISUBS | FISUBRS  | FIDIVS | FIDIVRS
166        | FIADDL | FIMULL   | FICOML | FICOMPL
167        | FISUBL | FISUBRL  | FIDIVL | FIDIVRL
168    
169    datatype funOp! = FABS | FCHS    datatype funOp! = FABS | FCHS
170                    | FSIN | FCOS | FTAN                    | FSIN | FCOS | FTAN
# Line 226  Line 236 
236          | isMemOpnd(I.Displace _) = true          | isMemOpnd(I.Displace _) = true
237          | isMemOpnd(I.Indexed _) = true          | isMemOpnd(I.Indexed _) = true
238          | isMemOpnd _ = false          | isMemOpnd _ = false
239        fun showFbinOp(fbinOp, src) =        fun chop fbinOp =
         emit(  
           if isMemOpnd src then fbinOp  
           else  
240            let val n = size fbinOp            let val n = size fbinOp
241            in  case String.sub(fbinOp,n-1) of            in  case Char.toLower(String.sub(fbinOp,n-1)) of
242                 (#"s" | #"t") => String.substring(fbinOp,0,n-1)                  (#"s" | #"l") => String.substring(fbinOp,0,n-1)
243                | _ => fbinOp                | _ => fbinOp
244            end)            end
245    
246        val emit_dst = emit_operand        val emit_dst = emit_operand
247        val emit_src = emit_operand        val emit_src = emit_operand
# Line 355  Line 362 
362    
363     (* floating *)     (* floating *)
364      | FBINARY of {binOp:fbinOp, src:operand, dst:operand}      | FBINARY of {binOp:fbinOp, src:operand, dst:operand}
365          ``<showFbinOp(asm_fbinOp binOp,src)>\t<src>, <dst>''          asm: (if isMemOpnd src then ``<binOp>\t<src>''
366                  else ``<emit(chop(asm_fbinOp binOp))>\t<src>, <dst>''
367                 )
368    
369        | FIBINARY of {binOp:fibinOp, src:operand}
370            asm: ``<binOp>\t<src>'' (* the implied destination is %ST(0) *)
371    
372      | FUNARY of funOp      | FUNARY of funOp
373          ``<funOp>''          ``<funOp>''
# Line 363  Line 375 
375      | FUCOMPP      | FUCOMPP
376          ``fucompp''          ``fucompp''
377    
     | FCOM  
         ``fcom''  
   
378      | FCOMPP      | FCOMPP
379          ``fcompp''          ``fcompp''
380    
# Line 381  Line 390 
390      | FSTPT of operand      | FSTPT of operand
391          ``fstps\t<operand>''          ``fstps\t<operand>''
392    
393        | FLD1
394            ``fld1''
395    
396        | FLDL2E
397            ``fldl2e''
398    
399        | FLDL2T
400            ``fldl2t''
401    
402        | FLDLG2
403            ``fldlg2''
404    
405        | FLDLN2
406            ``fldln2''
407    
408        | FLDPI
409            ``fldpi''
410    
411        | FLDZ
412            ``fldz''
413    
414      | FLDL of operand      | FLDL of operand
415          ``fldl\t<operand>''          ``fldl\t<operand>''
416    
# Line 393  Line 423 
423      | FILD of operand      | FILD of operand
424          ``fild\t<operand>''          ``fild\t<operand>''
425    
426        | FILDL of operand
427            ``fildl\t<operand>''
428    
429        | FILDLL of operand
430            ``fildll\t<operand>''
431    
432      | FNSTSW      | FNSTSW
433          ``fnstsw''          ``fnstsw''
434    

Legend:
Removed from v.555  
changed lines
  Added in v.565

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0