summaryrefslogtreecommitdiff
path: root/testsuite/tests/codeGen/should_run/CallConv.hs
blob: 937e51ba09de202fc2ed9f767fe914769c47d07d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{-# LANGUAGE MagicHash, GHCForeignImportPrim, UnboxedTuples, UnliftedFFITypes #-}
import GHC.Exts

foreign import prim "someFuncF"
  someFuncF :: Float# -> Float# -> Float# -> Float# -> (# Float#, Float#, Float#, Float# #)

foreign import prim "someFuncD"
  someFuncD :: Double# -> Double# -> Double# -> Double# -> (# Double#, Double#, Double#, Double# #)

{-
someFuncF :: Float# -> Float# -> Float# -> Float# -> (# Float#, Float#, Float#, Float# #)
someFuncF x y z w = (# x `plusFloat#` y, x `minusFloat#` y, z `timesFloat#` w, z `divideFloat#` w #)

someFuncD :: Double# -> Double# -> Double# -> Double# -> (# Double#, Double#, Double#, Double# #)
someFuncD x y z w = (# x +## y, x -## y, z *## w, z /## w #)
-}

main = do
  case someFuncF 1.0# 3.0# 4.0# 2.0# of
    (# a, b, c, d #) -> do
      print (F# a)
      print (F# b)
      print (F# c)
      print (F# d)
  case someFuncD 1.0## 3.0## 4.0## 2.0## of
    (# a, b, c, d #) -> do
      print (D# a)
      print (D# b)
      print (D# c)
      print (D# d)