Wow, great inspiration, thx a lot !
Only some changes and it should work for negative and positive cases :
// Transfer globalaccum 1 to globalaccum 2 using globalaccum3 as a temp
// Warning : Could get nasty with large values ...
fmov {
trigger mov {
trigger fmov movpos
trigger fmov movneg
}
// handle positive source accum
trigger movpos {
globalaccum 1 abort_if_less_than 0
// init temp accum
globalaccum 3 set 0
// init dest accum
globalaccum 2 set 0
trigger fmov movtmppos
trigger fmov movdstpos
}
trigger movtmppos {
globalaccum 1 abort_if_equal 0
globalaccum 1 inc -1
globalaccum 3 inc 1
trigger fmov movtmppos
}
trigger movdstpos {
globalaccum 3 abort_if_equal 0
globalaccum 3 inc -1
globalaccum 1 inc 1
globalaccum 2 inc 1
trigger fmov movdstpos
}
// handle negative source accum
trigger movneg {
globalaccum 1 abort_if_greater_than -1
// init temp accum
globalaccum 3 set -1
// init dest accum
globalaccum 2 set -1
trigger fmov movtmpneg
trigger fmov movdstneg
}
trigger movtmpneg {
globalaccum 1 abort_if_equal -1
globalaccum 1 inc 1
globalaccum 3 inc -1
trigger fmov movtmpneg
}
trigger movdstneg {
globalaccum 3 abort_if_equal -1
globalaccum 3 inc 1
globalaccum 1 inc -1
globalaccum 2 inc -1
trigger fmov movdstneg
}
}
Iam getting busy to find something for equal accums.