* device/include/asm/pic16/features.h,
[fw/sdcc] / device / lib / pic16 / libsdcc / gptr / gptrput4.c
index 6f0baaecb1da2f9aeb4632b6e6144dfe4aae9dc2..26fed527173c8d3234a0b0cde4a81c9884584d2a 100644 (file)
 */
 
 /* write address is expected to be in WREG:FSR0H:FSR0L while
- * write value is in TBLPTRH:TBLPTRL:PRODH:PRODL */
+ * write value is in TBLPTRH:TBLPTRL:PRODH:[stack] */
  
 extern POSTINC0;
+extern PREINC1;
 extern INDF0;
 extern FSR0L;
 extern FSR0H;
@@ -44,9 +45,9 @@ extern TABLAT;
 extern PRODL;
 extern PRODH;
 
-void _gptrput4(void) _naked
+void _gptrput4(void) __naked
 {
-  _asm
+  __asm
     /* decode generic pointer MSB (in WREG) bits 6 and 7:
      * 00 -> code (unimplemented)
      * 01 -> EEPROM (unimplemented)
@@ -54,34 +55,34 @@ void _gptrput4(void) _naked
      * 11 -> unimplemented
      */
     btfss      _WREG, 7
-    goto       _lab_01_
+    bra                _lab_01_
     
     /* data pointer  */
     /* data are already in FSR0 */
-    movff      _PRODL, _POSTINC0
+    movff      _PRODL, _FSR0H
+    
+    movff      _PREINC1, _POSTINC0
     movff      _PRODH, _POSTINC0
     movff      _TBLPTRL, _POSTINC0
     movff      _TBLPTRH, _POSTINC0
     
-    goto _end_
+    return
     
 
 _lab_01_:
     /* code or eeprom */
-    btfsc      _WREG, 6
-    goto       _lab_02_
+    btfss      _WREG, 6
+    return
     
     /* code pointer, cannot write code pointers */
     
-    goto _end_
   
 _lab_02_:
     /* EEPROM pointer */
 
     /* unimplemented yet */
 
-_end_:
 
-  _endasm;
+  return
+  __endasm;
 }