;@ map s 5 AMPEXP CLA001 AMPEXP
;@ map d BUT002
;@ map s 5 AMPEXP CLA001 AMPEXP
;@ map d BUT002
;@ map d BUT003

;@ ins k k k
;@ outs k
opcode Mix21B, 0, kkkkkkkkk
  kInv1,kLev1, kInv2,kLev2, kExpLin, kin1,kin2, kchain, kout  xin
  kIn1 zkr kin1
  kIn2 zkr kin2
  kChain zkr kchain

 ;          Inv=   0   1
  kInv[] fillarray 1, -1

  if kExpLin == 1 goto Out
    kLev1 table kLev1, 100, 1
    kLev2 table kLev2, 100, 1
  Out:

  kOut = kChain + kIn1 * kLev1 * kInv[kInv1] + kIn2 * kLev2 * kInv[kInv2]
  zkw kOut, kout
endop

;@ ins a a a
;@ outs a
opcode Mix21B, 0, kkkkkkkkk
  kInv1,kLev1, kInv2,kLev2, kExpLin, kin1,kin2, kchain, kout  xin
  aIn1 zar kin1
  aIn2 zar kin2
  aChain zar kchain

 ;          Inv=   0   1
  kInv[] fillarray 1, -1

  if kExpLin == 1 goto Out
    kLev1 table kLev1, 100, 1
    kLev2 table kLev2, 100, 1
  Out:

  aOut = aChain + aIn1 * kLev1 * kInv[kInv1] + aIn2 * kLev2 * kInv[kInv2]
  zaw aOut, kout
endop
