/[guss]/guss/guss/i386/i386-xlate.c
ViewVC logotype

Diff of /guss/guss/i386/i386-xlate.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by jrydberg, Sun Sep 7 15:40:06 2003 UTC revision 1.5 by jrydberg, Sun Sep 14 19:12:35 2003 UTC
# Line 813  OP_O (struct disasm_info *info, int is_w Line 813  OP_O (struct disasm_info *info, int is_w
813    else    else
814      gen_addsi_a0_seg_base (info->override);      gen_addsi_a0_seg_base (info->override);
815    if (!is_write)    if (!is_write)
816      ldu_mem_t0_a0[mode] ();      ldu_mem_t0_a0[arg] ();
817    else    else
818      st_mem_a0_t0[mode] ();      st_mem_a0_t0[arg] ();
819  }  }
820    
821  static void  static void
# Line 2136  i386_translate_block (struct translated_ Line 2136  i386_translate_block (struct translated_
2136          case 0xa0: case 0xa1: /* EAX, Ov */          case 0xa0: case 0xa1: /* EAX, Ov */
2137          case 0xa2: case 0xa3: /* Ov, EAX */          case 0xa2: case 0xa3: /* Ov, EAX */
2138            {            {
2139              int size_mode = (info.sizeflags & AFLAG ? l_mode : w_mode);              int size_mode = ((info.sizeflags & AFLAG) ? l_mode : w_mode);
2140              mode = (opcode % 2) ? (info.sizeflags & DFLAG ? l_mode : w_mode)              
2141                                  : b_mode;              if (opcode == 0xa0 || opcode == 0xa2)
2142                  mode = b_mode;
2143              commit_volatile (&info, 1);              commit_volatile (&info, 1);
2144    
2145              switch (opcode)              switch (opcode)
2146                {                {
2147                case 0xa0: case 0xa1:                case 0xa0: case 0xa1:
2148                  OP_O (&info, 0, size_mode, 0, 0);                  OP_O (&info, 0, size_mode, 0, mode);
2149                  OP_REG (&info, 1, mode, 0, eax_regno);                  OP_REG (&info, 1, mode, 0, eax_regno);
2150                  break;                  break;
2151                case 0xa2: case 0xa3:                case 0xa2: case 0xa3:
2152                  OP_REG (&info, 0, mode, 0, eax_regno);                  OP_REG (&info, 0, mode, 0, eax_regno);
2153                  OP_O (&info, 1, size_mode, 0, 0);                  OP_O (&info, 1, size_mode, 0, mode);
2154                  break;                  break;
2155                }                }
2156              break;              break;
# Line 2410  i386_translate_block (struct translated_ Line 2410  i386_translate_block (struct translated_
2410                      }                      }
2411                    break;                    break;
2412                  }                  }
2413                  case 0x07: /* invlpg */
2414                    {
2415                      /* FIXME if cpl != 0, take GP */
2416                      OP_E (&info, 0, l_mode, 0, /*no read*/ 1);
2417                      gen_addsi_a0_seg_base (info.segno);
2418                      gen_invlpg_a0 ();
2419                      break;
2420                    }
2421                default:                default:
2422                    printf ("info.reg == %d\n", info.reg);
2423                  goto illegal_op;                  goto illegal_op;
2424                }                }
2425              break;              break;
# Line 2420  i386_translate_block (struct translated_ Line 2429  i386_translate_block (struct translated_
2429              gen_cpuid ();              gen_cpuid ();
2430              break;              break;
2431            }            }
2432            case 0x131: /* rdts */
2433              {
2434                gen_rdts ();
2435                break;
2436              }
2437          case 0x106: /* clts */          case 0x106: /* clts */
2438            {            {
2439              if (0 /* cpl != 0 */)              if (0 /* cpl != 0 */)
# Line 2883  i386_translate_block (struct translated_ Line 2897  i386_translate_block (struct translated_
2897            goto illegal_op;            goto illegal_op;
2898    
2899          /* No-operation.  */          /* No-operation.  */
2900          case 0x90:          case 0x90:
2901            break;            {
2902                if (info.prefixes)
2903                  {
2904                    /* L4Ka uses "lock nop" for it's syscall interface.  
2905                       I can't find anything about this generating an exception.  */
2906                    commit_volatile (&info, 1);
2907                    gen_take_exception (EXC_UD, 0);
2908                    is_done = DONE_BRANCH;
2909                  }
2910                break;
2911              }
2912                    
2913          case 0x1af: /* imul Gv, Ev */          case 0x1af: /* imul Gv, Ev */
2914          case 0x69:  /* imul Gv, Ev, Iv */          case 0x69:  /* imul Gv, Ev, Iv */

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26