# The OS/K Team licenses this file to you under the MIT license. # See the LICENSE file in the project root for more information. #---------------------------------------------------------------------------# # Arithmetic instructions # #---------------------------------------------------------------------------# # # CMP Comparison instruction # # $1 - $2 # # Sets CF if unsigned integer overflow occur, clears it otherwise # Sets OF is signed integer overflow occur, clears it otherwise # Sets ZF and SF according to the result # cmp rim rim # # Arithmetical SGN operation # # IF ($1 == 0) THEN # $2 = 0 # ELIF ($1 GT 0) THEN # $2 = 1 # ELSE # $2 = LONG_MIN # FI # # Treats $1 and $2 as signed values # Sets ZF and SF according to the result # sgn rm rim sgnf rm rim # # Arithmetical NEG operation # # $1 = NOT($2) + 1 # # Sets CF if $2 == 0; clears it otherwise # Sets OF if $2 == $LONG_MIN; clears it otherwise # Sets ZF and SF according to the result # neg rm rim negf rm rim # # Arithmetical INC operation # # $1 = $1 + 1 # # Preserves CF # Sets OF if $1 == $LONG_MAX, clears it otherwise # Sets ZF and SF according to the result # inc rm incf rm # # Arithmetical DEC operation # # $1 = $1 - 1 # # Preserves CF # Sets OF if $1 == $LONG_MIN, clears it otherwise # Sets ZF and SF according to the result # dec rm decf rm # # Arithmetical ADD operation # # $1 = $1 + $2 # # Sets CF if unsigned integer overflow occur, clears it otherwise # Sets OF is signed integer overflow occur, clears it otherwise # Sets ZF and SF according to the result # add rm rim addf rm rim # # Atomic exchange and add (XADD) # # $tmp = $1 # $1 = $1 + $2 # $2 = $1 # # Preserves all flags # xadd rm rm # # Arithmetical ADD operation, with carry # # $1 = $1 + $2 + CF # # Sets CF if unsigned integer overflow occur, clears it otherwise # Sets OF is signed integer overflow occur, clears it otherwise # Sets ZF and SF according to the result # adc rm rim adcf rm rim # # Arithmetical SUB operation # # $1 = $1 - $2 # # Sets CF if unsigned integer overflow occur, clears it otherwise # Sets OF is signed integer overflow occur, clears it otherwise # Sets ZF and SF according to the result # sub rm rim subf rm rim # # Arithmetical unsigned MUL operation # # $1 = LO($1 * $2) # # Sets CF and OF if HI($1 * $2) > 0, clears them otherwise # Preserves ZF and SF # mul rm rim mulf rm rim # # Arithmetical unsigned 128-bit MUL operation # # $1 = HI($2 * $3) # $2 = LO($2 * $3) # # Sets CF and OF if HI($2 * $3) > 0, clears them otherwise # Preserves ZF and SF # mulx rm rm rim mulfx rm rm rim # # Arithmetical unsigned DIV operation # # $1 = $1 DIV $2 # # Preserves all flags # div rm rim # # Arithmetical unsigned combined DIV and MOD operations # # $1 = ($2 MOD $3) # $2 = ($2 DIV $3) # # Preserves all flags # divx rm rm rim # # Arithmetical unsigned modulo operation (REM) # # $1 = $1 MOD $2 # # Preserves all flags # rem rm rim