This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH,z80] Treat undocumented instruction sli properly.


Arnold Metselaar <arnold.metselaar@planet.nl> wrote:
> gas/Changelog
> 2018-08-16 Arnold Metselaar <arnold.metsel@gmail.com>
> 	* config/tc-z80.c: Correct treatment of undocumented
> instruction sli/sll. (emit_mr): Add argument unportable.
> 	(emit_bit): Adapt call to emit_mr.
> 	(emit_mr_z80): New function.
> 	(emit_mr_unportable): New function.


The ChangeLog entry does not agree with the actual modification.
In the config/tc-z80.c the function name is "emit_mr_unport".

Regards,
Gunther

> 	(instab[]): Replace emit_mr with emit_mr_z80 or
> emit_mr_unportable as appropriate.
> 
> 
> diff --git a/gas/config/tc-z80.c b/gas/config/tc-z80.c 
> index 5a4fd38fce..ede7cbe1db 100644 
> --- a/gas/config/tc-z80.c 
> +++ b/gas/config/tc-z80.c 
> @@ -850,7 +850,7 @@ emit_m (char prefix, char opcode, const char
> *args) combinations (ix+d),r and (iy+d),r (if unportable instructions 
>    are allowed).  */ 
> static const char * 
> -emit_mr (char prefix, char opcode, const char *args) 
> +emit_mr (char prefix, char opcode, const char *args, char
> unportable) { 
>   expressionS arg_m, arg_r; 
>   const char *p; 
> @@ -873,10 +873,12 @@ emit_mr (char prefix, char opcode, const char
> *args) ill_op (); 
>              break; 
>            } 
> -         check_mach (INS_UNPORT); 
> +          unportable = 1; 
>        } 
>       /* Fall through.  */ 
>     case O_register: 
> +      if (unportable) 
> +          check_mach (INS_UNPORT); 
>       emit_mx (prefix, opcode, 0, & arg_m); 
>       break; 
>     default: 
> @@ -885,6 +887,18 @@ emit_mr (char prefix, char opcode, const char
> *args) return p; 
> } 
>  
> +static const char * 
> +emit_mr_z80 (char prefix, char opcode, const char *args) 
> +{ 
> +    return emit_mr(prefix, opcode, args, 0); 
> +} 
> + 
> +static const char * 
> +emit_mr_unport (char prefix, char opcode, const char *args) 
> +{ 
> +    return emit_mr(prefix, opcode, args, 1); 
> +} 
> + 
> static void 
> emit_sx (char prefix, char opcode, expressionS * arg_p) 
> { 
> @@ -1203,7 +1217,7 @@ emit_bit (char prefix, char opcode, const char
> * args) p = emit_m (prefix, opcode + (bn << 3), p); 
>       else 
>        /* Set, res : resulting byte can be copied to register.  */ 
> -       p = emit_mr (prefix, opcode + (bn << 3), p); 
> +        p = emit_mr (prefix, opcode + (bn << 3), p, 0); 
>     } 
>   else 
>     ill_op (); 
> @@ -1888,25 +1902,25 @@ static table_t instab[] = 
>   { "ret",  0xC9, 0xC0, emit_retcc }, 
>   { "reti", 0xED, 0x4D, emit_insn }, 
>   { "retn", 0xED, 0x45, emit_insn }, 
> -  { "rl",   0xCB, 0x10, emit_mr }, 
> +  { "rl",   0xCB, 0x10, emit_mr_z80 }, 
>   { "rla",  0x00, 0x17, emit_insn }, 
> -  { "rlc",  0xCB, 0x00, emit_mr }, 
> +  { "rlc",  0xCB, 0x00, emit_mr_z80 }, 
>   { "rlca", 0x00, 0x07, emit_insn }, 
>   { "rld",  0xED, 0x6F, emit_insn }, 
> -  { "rr",   0xCB, 0x18, emit_mr }, 
> +  { "rr",   0xCB, 0x18, emit_mr_z80 }, 
>   { "rra",  0x00, 0x1F, emit_insn }, 
> -  { "rrc",  0xCB, 0x08, emit_mr }, 
> +  { "rrc",  0xCB, 0x08, emit_mr_z80 }, 
>   { "rrca", 0x00, 0x0F, emit_insn }, 
>   { "rrd",  0xED, 0x67, emit_insn }, 
>   { "rst",  0x00, 0xC7, emit_rst}, 
>   { "sbc",  0x98, 0x42, emit_adc }, 
>   { "scf",  0x00, 0x37, emit_insn }, 
>   { "set",  0xCB, 0xC0, emit_bit }, 
> -  { "sla",  0xCB, 0x20, emit_mr }, 
> -  { "sli",  0xCB, 0x30, emit_mr }, 
> -  { "sll",  0xCB, 0x30, emit_mr }, 
> -  { "sra",  0xCB, 0x28, emit_mr }, 
> -  { "srl",  0xCB, 0x38, emit_mr }, 
> +  { "sla",  0xCB, 0x20, emit_mr_z80 }, 
> +  { "sli",  0xCB, 0x30, emit_mr_unport }, 
> +  { "sll",  0xCB, 0x30, emit_mr_unport }, 
> +  { "sra",  0xCB, 0x28, emit_mr_z80 }, 
> +  { "srl",  0xCB, 0x38, emit_mr_z80 }, 
>   { "sub",  0x00, 0x90, emit_s }, 
>   { "xor",  0x00, 0xA8, emit_s }, 
> } ;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]