16cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov%default {"result":"","rem":"0"} 26cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov/* 36cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov * 32-bit div/rem "lit8" binary operation. Handles special case of 46cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov * op0=minint & op1=-1 56cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov */ 66cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov /* div/rem/lit8 vAA, vBB, #+CC */ 76cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov movzbq 2(rPC), %rax # eax <- BB 86cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov movsbl 3(rPC), %ecx # ecx <- ssssssCC 96cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov GET_VREG %eax, %rax # eax <- rBB 106cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov testl %ecx, %ecx 116cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov je common_errDivideByZero 126cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov cmpl $$-1, %ecx 136cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov je 2f 146cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov cdq # rax <- sign-extended of eax 156cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov idivl %ecx 166cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov1: 176cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov SET_VREG $result, rINSTq # vA <- result 186cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov ADVANCE_PC_FETCH_AND_GOTO_NEXT 2 196cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov2: 206cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .if $rem 216cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov xorl $result, $result 226cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .else 236cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov negl $result 246cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .endif 256cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov jmp 1b 26