- ar = a2stix car
- sr = a2stix csr
- dr = a2stix cdr
- liveness= a2stix clive
- aa1 = a2stix caa1
- sa1 = a2stix csa1
- da1 = a2stix cda1
- aa2 = a2stix caa2
- sa2 = a2stix csa2
- da2 = a2stix cda2
-
- space = mpSpace data_hs 3 1 [sa1, sa2]
- oldHp = StIndex PtrKind stgHp (StPrim IntNegOp [space])
- safeHp = saveLoc target Hp
- save = StAssign PtrKind safeHp oldHp
- (a1,a2,a3) = toStruct data_hs argument1 (aa1,sa1,da1)
- (a4,a5,a6) = toStruct data_hs argument2 (aa2,sa2,da2)
- mpz_op = StCall rtn VoidKind [result3, argument1, argument2]
- restore = StAssign PtrKind stgHp safeHp
- (r1,r2,r3) = fromStruct data_hs result3 (ar,sr,dr)
- in
- heapCheck target liveness space (StInt 0) `thenSUs` \ heap_chk ->
-
- returnSUs (heap_chk .
- (\xs -> a1 : a2 : a3 : a4 : a5 : a6
- : save : init3 : mpz_op : r1 : r2 : r3 : restore : xs))
-
-gmpTake2Return2
- :: Target
- -> (CAddrMode,CAddrMode,CAddrMode,CAddrMode,CAddrMode,CAddrMode)
- -- 2 results (3 parts each)
- -> FAST_STRING -- function name
- -> (CAddrMode,CAddrMode,CAddrMode,CAddrMode,CAddrMode,CAddrMode,CAddrMode)
- -- liveness + 2 arguments (3 parts each)
- -> SUniqSM StixTreeList
-
-gmpTake2Return2 target_STRICT res@(car1,csr1,cdr1, car2,csr2,cdr2)
- rtn args@(clive, caa1,csa1,cda1, caa2,csa2,cda2) =
- let
- a2stix = amodeToStix target
- data_hs = dataHS target
-
- ar1 = a2stix car1
- sr1 = a2stix csr1
- dr1 = a2stix cdr1
- ar2 = a2stix car2
- sr2 = a2stix csr2
- dr2 = a2stix cdr2
- liveness= a2stix clive
- aa1 = a2stix caa1
- sa1 = a2stix csa1
- da1 = a2stix cda1
- aa2 = a2stix caa2
- sa2 = a2stix csa2
- da2 = a2stix cda2
-
- space = StPrim IntMulOp [mpSpace data_hs 2 1 [sa1, sa2], StInt 2]
- oldHp = StIndex PtrKind stgHp (StPrim IntNegOp [space])
- safeHp = saveLoc target Hp
- save = StAssign PtrKind safeHp oldHp
- (a1,a2,a3) = toStruct data_hs argument1 (aa1,sa1,da1)
- (a4,a5,a6) = toStruct data_hs argument2 (aa2,sa2,da2)
- mpz_op = StCall rtn VoidKind [result3, result4, argument1, argument2]
- restore = StAssign PtrKind stgHp safeHp
- (r1,r2,r3) = fromStruct data_hs result3 (ar1,sr1,dr1)
- (r4,r5,r6) = fromStruct data_hs result4 (ar2,sr2,dr2)
-
- in
- heapCheck target liveness space (StInt 0) `thenSUs` \ heap_chk ->
-
- returnSUs (heap_chk .
- (\xs -> a1 : a2 : a3 : a4 : a5 : a6
- : save : init3 : init4 : mpz_op
- : r1 : r2 : r3 : r4 : r5 : r6 : restore : xs))