- case S_JMP11:
- /* ACALL or AJMP. In Flat24 mode, this is a
- * 19 bit destination; in 8051 mode, this is a
- * 11 bit destination.
- *
- * The opcode is merged with the address in a
- * hack-o-matic fashion by the linker.
+ case S_JMP11:
+ /* ACALL or AJMP. In Flat24 mode, this is a
+ * 19 bit destination; in 8051 mode, this is a
+ * 11 bit destination.
+ *
+ * The opcode is merged with the address in a
+ * hack-o-matic fashion by the linker.
- expr(&e, 0);
- if (flat24Mode)
- {
- outr19(&e, op, R_J19);
- }
- else
- {
- outr11(&e, op, R_J11);
- }
- break;
-
- case S_JMP16:
- /* LCALl or LJMP. In Flat24 mode, this is a 24 bit
- * destination; in 8051 mode, this is a 16 bit
- * destination.
- */
- expr(&e, 0);
- outab(op);
- if (flat24Mode)
- {
- outr24(&e, 0);
- }
- else
- {
- outrw(&e, 0);
- }
- break;
-
- case S_ACC:
+ expr(&e, 0);
+ if (flat24Mode)
+ {
+ outr19(&e, op, R_J19);
+ }
+ else
+ {
+ outr11(&e, op, R_J11);
+ }
+ break;
+
+ case S_JMP16:
+ /* LCALl or LJMP. In Flat24 mode, this is a 24 bit
+ * destination; in 8051 mode, this is a 16 bit
+ * destination.
+ */
+ expr(&e, 0);
+ outab(op);
+ if (flat24Mode)
+ {
+ outr24(&e, 0);
+ }
+ else
+ {
+ outrw(&e, 0);
+ }
+ break;
+
+ case S_ACC:
- case S_TYP1:
- /* A, direct, @R0, @R1, R0 to R7. "INC" also allows DPTR */
+ case S_TYP1:
+ /* A, direct, @R0, @R1, R0 to R7. "INC" also allows DPTR */
- case S_TYP2:
- /* A,#imm; A,direct; A,@R0; A,@R1; A,R0 to A,R7 */
+ case S_TYP2:
+ /* A,#imm; A,direct; A,@R0; A,@R1; A,R0 to A,R7 */
- case S_TYP3:
- /* dir,A; dir,#imm;
- * A,#imm; A,direct; A,@R0; A,@R1; A,R0 to A,R7
+ case S_TYP3:
+ /* dir,A; dir,#imm;
+ * A,#imm; A,direct; A,@R0; A,@R1; A,R0 to A,R7
- case S_TYP4:
- /* A,direct; A,@R0; A,@R1; A,R0 to A,R7 */
+ case S_TYP4:
+ /* A,direct; A,@R0; A,@R1; A,R0 to A,R7 */
- if (t1 != S_IMMED)
- aerr();
- outab(0x90);
-
- /* mov DPTR, #immed: for Flat24 mode,
- * #immed is a 24 bit constant. For 8051,
- * it is a 16 bit constant.
- */
- if (flat24Mode)
- {
- outr24(&e1, 0);
- }
- else
- {
- outrw(&e1, 0);
- }
+ if (t1 != S_IMMED)
+ aerr();
+ outab(0x90);
+
+ /* mov DPTR, #immed: for Flat24 mode,
+ * #immed is a 24 bit constant. For 8051,
+ * it is a 16 bit constant.
+ */
+ if (flat24Mode)
+ {
+ outr24(&e1, 0);
+ }
+ else
+ {
+ outrw(&e1, 0);
+ }
- expr(&e1, 0);
- if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
- if ( e1.e_addr == dot.s_addr)
- v1 = -3;
- else
- v1 = e1.e_addr - dot.s_addr - 1;
- if (pass==2 && ((v1 < -128) || (v1 > 127)))
- aerr();
- outab(v1);
- } else {
- outrb(&e1, R_PCR);
- }
- if (e1.e_mode != S_USER)
- rerr();
- break;
-
- case S_BR:
- /* Relative branch */
- outab(op);
- expr(&e1, 0);
- if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
- if ( e1.e_addr == dot.s_addr)
- v1 = -2;
- else
- v1 = e1.e_addr - dot.s_addr - 1;
- if (pass == 2 && ((v1 < -128) || (v1 > 127)))
- aerr();
- outab(v1);
- } else {
- outrb(&e1, R_PCR);
- }
- if (e1.e_mode != S_USER)
- rerr();
- break;
+ expr(&e1, 0);
+ if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
+ if ( e1.e_addr == dot.s_addr)
+ v1 = -3;
+ else
+ v1 = e1.e_addr - dot.s_addr - 1;
+ if (pass==2 && ((v1 < -128) || (v1 > 127)))
+ aerr();
+ outab(v1);
+ } else {
+ outrb(&e1, R_PCR);
+ }
+ if (e1.e_mode != S_USER)
+ rerr();
+ break;
+
+ case S_BR:
+ /* Relative branch */
+ outab(op);
+ expr(&e1, 0);
+ if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
+ if ( e1.e_addr == dot.s_addr)
+ v1 = -2;
+ else
+ v1 = e1.e_addr - dot.s_addr - 1;
+ if (pass == 2 && ((v1 < -128) || (v1 > 127)))
+ aerr();
+ outab(v1);
+ } else {
+ outrb(&e1, R_PCR);
+ }
+ if (e1.e_mode != S_USER)
+ rerr();
+ break;
- /* A,#; A,dir; @R0,#; @R1,#; Rn,# */
+ /* A,#; A,dir; @R0,#; @R1,#; Rn,# */
- expr(&e1, 0);
- if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
- if ( e1.e_addr == dot.s_addr)
- v1 = -3;
- else
- v1 = e1.e_addr - dot.s_addr - 1;
- if ((v1 < -128) || (v1 > 127))
- aerr();
- outab(v1);
- } else {
- outrb(&e1, R_PCR);
- }
- if (e1.e_mode != S_USER)
- rerr();
+ expr(&e1, 0);
+ if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
+ if ( e1.e_addr == dot.s_addr)
+ v1 = -3;
+ else
+ v1 = e1.e_addr - dot.s_addr - 1;
+ if (pass == 2 && ((v1 < -128) || (v1 > 127)))
+ aerr();
+ outab(v1);
+ } else {
+ outrb(&e1, R_PCR);
+ }
+ if (e1.e_mode != S_USER)
+ rerr();
- expr(&e1, 0);
- if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
- if ( e1.e_addr == dot.s_addr)
- v1 = -2;
- else
- v1 = e1.e_addr - dot.s_addr - 1;
- if ((v1 < -128) || (v1 > 127))
- aerr();
- outab(v1);
- } else {
- outrb(&e1, R_PCR);
- }
- if (e1.e_mode != S_USER)
- rerr();
- break;
-
- case S_JMP:
- /* @A+DPTR */
+ expr(&e1, 0);
+ if (e1.e_base.e_ap == NULL || e1.e_base.e_ap == dot.s_area) {
+ if ( e1.e_addr != dot.s_addr)
+ v1 = e1.e_addr - dot.s_addr - 1;
+ if (pass == 2 && ((v1 < -128) || (v1 > 127)))
+ aerr();
+ outab(v1);
+ } else {
+ outrb(&e1, R_PCR);
+ }
+ if (e1.e_mode != S_USER)
+ rerr();
+ break;
+
+ case S_JMP:
+ /* @A+DPTR */
- /* A,@DPTR A,@R0 A,@R1 @DPTR,A @R0,A @R1,A */
+ /* A,@DPTR A,@R0 A,@R1 @DPTR,A @R0,A @R1,A */