package Ġorg . eln 2 . compute . u arch Computer Ċ Ċ import Ġkotlin . math . cos Ċ import Ġkotlin . math . exp Ċ import Ġkotlin . math . ln Ċ import Ġkotlin . math . sqrt Ċ Ċ /** Ċ Ġ* ĠFloating ĠPoint ĠUnit Ġfor Ġu arch Computer Ċ Ġ*/ Ċ @ Experimental Unsigned Types Ċ class ĠF PU Ġ{ ĊĠĠĠ Ġvar Ġinput A Ġ= Ġ 0 . 0 ĊĠĠĠ Ġvar Ġinput B Ġ= Ġ 0 . 0 ĊĊĠĠĠ Ġvar Ġinput AL : ĠUInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput A . to Raw Bits (). to UInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput A Ġ= ĠDouble . Companion . from Bits ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput A . to Raw Bits (). to UL ong (). and ( 0 xFFFFFFFF 0 0 0 0 0 0 0 0 u ). or ( value . to UL ong ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġinput AH : ĠUInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput A . to Raw Bits (). to UL ong (). shr ( 3 2 ). to UInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput A Ġ= ĠDouble . Companion . from Bits ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput A . to Raw Bits (). to UL ong (). and ( 0 xFFFFFFFF u ). or ( value . to UL ong (). sh l ( 3 2 )). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġinput BL : ĠUInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput B . to Raw Bits (). to UInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput B Ġ= ĠDouble . Companion . from Bits ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput B . to Raw Bits (). to UL ong (). and ( 0 xFFFFFFFF 0 0 0 0 0 0 0 0 u ). or ( value . to UL ong ()). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġinput BH : ĠUInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinput B . to Raw Bits (). to UL ong (). shr ( 3 2 ). to UInt () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput B Ġ= ĠDouble . Companion . from Bits ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput B . to Raw Bits (). to UL ong (). and ( 0 xFFFFFFFF u ). or ( value . to UL ong (). sh l ( 3 2 )). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠF PU ĠOperations ĠList ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġenum Ġclass ĠF PU Ops Ġ{ ĠAdd , ĠCos , ĠDiv , ĠExp , ĠInv , ĠInt , ĠL n , ĠMin us One , ĠMult , ĠNeg , ĠOne , ĠS q re , ĠS qrt , ĠSub , ĠTo Double , ĠZero Ġ} ĊĊĠĠĠ Ġvar Ġcurr Op Ġ= ĠF PU Ops . Zero ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġstep Ġ- Ġdoes Ġcomput ations Ġon Ġthe Ġregisters . ĠLoad Ġyour Ġdata Ġin Ġbefore Ġthis , Ġand Ġgrab Ġyour Ġdata Ġafter Ġthis . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstep () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( curr Op ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Add Ġ-> Ġinput A Ġ+= Ġinput B ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Cos Ġ-> Ġinput A Ġ= Ġcos ( input A ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Div Ġ-> Ġinput A Ġ/= Ġinput B ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Exp Ġ-> Ġinput A Ġ= Ġexp ( input A ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Inv Ġ-> Ġinput A Ġ= Ġ 1 Ġ/ Ġinput A ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Int Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp Ġ= Ġinput A . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput AH Ġ= Ġtmp . to UL ong (). shr ( 3 2 ). to UInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput AL Ġ= Ġtmp . to UInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Ln Ġ-> Ġinput A Ġ= Ġln ( input A ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Minus One Ġ-> Ġinput A Ġ= Ġ- 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Mult Ġ-> Ġinput A Ġ*= Ġinput B ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Neg Ġ-> Ġinput A Ġ*= Ġ- 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . One Ġ-> Ġinput A Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Sq re Ġ-> Ġinput A Ġ*= Ġinput A ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Sqrt Ġ-> Ġinput A Ġ= Ġsqrt ( input A ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Sub Ġ-> Ġinput A Ġ-= Ġinput B ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . ToDouble Ġ-> Ġinput A Ġ= Ġinput A . to Raw Bits (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF PU Ops . Zero Ġ-> Ġinput A Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ