+ switch(shCount) {
+ case 0:
+ break;
+ case 1:
+ case 2:
+ case 3:
+ emitCLRC;
+ if(same) {
+ emitpcode(POC_RRF,popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RRF,popGet(AOP(result),offr,FALSE,FALSE));
+ } else {
+
+ emitpcode(POC_RRFW, popGet(AOP(left),offl+MSB16,FALSE,FALSE));
+ emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RRFW, popGet(AOP(left),offl,FALSE,FALSE));
+ emitpcode(POC_MOVWF,popGet(AOP(result),offr,FALSE,FALSE));
+ }
+
+ while(--shCount) {
+ emitCLRC;
+ emitpcode(POC_RRF,popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RRF,popGet(AOP(result),offr,FALSE,FALSE));
+ }
+ break;
+ case 4:
+ case 5:
+ if(same) {
+
+ emitpcode(POC_MOVLW, popGetLit(0xf0));
+ emitpcode(POC_ANDWF, popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_SWAPF, popGet(AOP(result),offr,FALSE,FALSE));
+
+ emitpcode(POC_SWAPF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_ANDFW, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_XORWF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_ADDWF, popGet(AOP(result),offr,FALSE,FALSE));
+ } else {
+ emitpcode(POC_SWAPF, popGet(AOP(left),offl,FALSE,FALSE));
+ emitpcode(POC_ANDLW, popGetLit(0x0f));
+ emitpcode(POC_MOVWF, popGet(AOP(result),offr,FALSE,FALSE));
+
+ emitpcode(POC_SWAPF, popGet(AOP(left),offl+MSB16,FALSE,FALSE));
+ emitpcode(POC_MOVWF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_ANDLW, popGetLit(0xf0));
+ emitpcode(POC_XORWF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_ADDWF, popGet(AOP(result),offr,FALSE,FALSE));
+ }
+
+ if(shCount >=5) {
+ emitpcode(POC_RRF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RRF, popGet(AOP(result),offr,FALSE,FALSE));
+ }
+
+ break;
+
+ case 6:
+ if(same) {
+
+ emitpcode(POC_RLF, popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+
+ emitpcode(POC_RLF, popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RLFW, popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_ANDLW,popGetLit(0x03));
+ emitpcode(POC_XORFW,popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_XORWF,popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_XORFW,popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_MOVWF,popGet(AOP(result),offr,FALSE,FALSE));
+ } else {
+ emitpcode(POC_RLFW, popGet(AOP(left),offl,FALSE,FALSE));
+ emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RLFW, popGet(AOP(result),offl+MSB16,FALSE,FALSE));
+ emitpcode(POC_MOVWF,popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RLF, popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_RLFW, popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_ANDLW,popGetLit(0x03));
+ emitpcode(POC_MOVWF,popGet(AOP(result),offr,FALSE,FALSE));
+ }
+
+ break;
+ case 7:
+ emitpcode(POC_RLFW, popGet(AOP(left),offl,FALSE,FALSE));
+ emitpcode(POC_RLFW, popGet(AOP(left),offl+MSB16,FALSE,FALSE));
+ emitpcode(POC_MOVWF,popGet(AOP(result),offr,FALSE,FALSE));
+ emitpcode(POC_CLRF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16,FALSE,FALSE));
+ }