Changeset 13997


Ignore:
Timestamp:
Jul 21, 2010, 4:01:27 AM (9 years ago)
Author:
gb
Message:

"safe" FP operations need to clear fpscr status bits first.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/arm/compiler/ARM/arm-vinsns.lisp

    r13982 r13997  
    12601260     ((src :lisp))
    12611261     ((imm :s32)))
     1262  (fmrx imm fpscr)
     1263  (bic imm imm (:$ #xff))
     1264  (fmxr fpscr imm)
    12621265  (mov imm (:asr src (:$ arm::fixnumshift)))
    12631266  (fmsr dest imm)
     
    14691472    (((result :double-float))
    14701473     ((x :double-float)
    1471       (y :double-float)))
     1474      (y :double-float))
     1475     ((imm :u32)))
     1476  (fmrx imm fpscr)
     1477  (bic imm imm (:$ #xff))
     1478  (fmxr fpscr imm)
    14721479  (faddd result x y)
    14731480  (bl .SPcheck-fpu-exception))
     
    14821489    (((result :double-float))
    14831490     ((x :double-float)
    1484       (y :double-float)))
     1491      (y :double-float))
     1492     ((imm :u32)))
     1493  (fmrx imm fpscr)
     1494  (bic imm imm (:$ #xff))
     1495  (fmxr fpscr imm)
    14851496  (fsubd result x y)
    14861497  (bl .SPcheck-fpu-exception))
     
    14991510  (bl .SPcheck-fpu-exception))
    15001511
    1501 (define-arm-vinsn (double-float/-2-safe :predicatable)
     1512(define-arm-vinsn (double-float/-2 :predicatable)
    15021513    (((result :double-float))
    15031514     ((x :double-float)
     
    15081519    (((result :double-float))
    15091520     ((x :double-float)
    1510       (y :double-float)))
     1521      (y :double-float))
     1522     ((imm :u32)))
     1523  (fmrx imm fpscr)
     1524  (bic imm imm (:$ #xff))
     1525  (fmxr fpscr imm)
    15111526  (fdivd result x y)
    15121527  (bl .SPcheck-fpu-exception))
     
    15311546     ((x :single-float)
    15321547      (y :single-float))
    1533      ())
     1548     ((imm :u32)))
     1549  (fmrx imm fpscr)
     1550  (bic imm imm (:$ #xff))
     1551  (fmxr fpscr imm)
    15341552  (fadds result x y)
    15351553  (bl .SPcheck-fpu-exception))
     
    15441562    (((result :single-float))
    15451563     ((x :single-float)
    1546       (y :single-float)))
     1564      (y :single-float))
     1565     ((imm :u32)))
     1566  (fmrx imm fpscr)
     1567  (bic imm imm (:$ #xff))
     1568  (fmxr fpscr imm)
    15471569  (fsubs result x y)
    15481570  (bl .SPcheck-fpu-exception))
     
    15571579    (((result :single-float))
    15581580     ((x :single-float)
    1559       (y :single-float)))
     1581      (y :single-float))
     1582     ((imm :u32)))
     1583  (fmrx imm fpscr)
     1584  (bic imm imm (:$ #xff))
     1585  (fmxr fpscr imm)
    15601586  (fmuls result x y)
    15611587  (bl .SPcheck-fpu-exception))
     
    15701596    (((result :single-float))
    15711597     ((x :single-float)
    1572       (y :single-float)))
     1598      (y :single-float))
     1599     ((imm :u32)))
     1600  (fmrx imm fpscr)
     1601  (bic imm imm (:$ #xff))
     1602  (fmxr fpscr imm)
    15731603  (fdivs result x y)
    15741604  (bl .SPcheck-fpu-exception))
Note: See TracChangeset for help on using the changeset viewer.