16cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov%default {"result":"","rem":"0"} 26cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov/* 36cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov * 32-bit binary div/rem operation. Handles special case of op1=-1. 46cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov */ 56cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov /* div/rem/lit16 vA, vB, #+CCCC */ 66cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov /* Need A in rINST, ssssCCCC in ecx, vB in eax */ 76cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov movl rINST, %eax # rax <- 000000BA 86cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov sarl $$4, %eax # eax <- B 96cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov GET_VREG %eax, %rax # eax <- vB 106cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov movswl 2(rPC), %ecx # ecx <- ssssCCCC 116cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov andb $$0xf, rINSTbl # rINST <- A 126cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov testl %ecx, %ecx 136cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov jz common_errDivideByZero 146cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov cmpl $$-1, %ecx 156cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov je 2f 166cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov cdq # rax <- sign-extended of eax 176cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov idivl %ecx 186cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov1: 196cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov SET_VREG $result, rINSTq # vA <- result 206cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov ADVANCE_PC_FETCH_AND_GOTO_NEXT 2 216cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov2: 226cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .if $rem 236cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov xorl $result, $result 246cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .else 256cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov negl $result 266cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .endif 276cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov jmp 1b 28