home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #30 / NN_1992_30.iso / spool / comp / sys / intel / 2746 < prev    next >
Encoding:
Internet Message Format  |  1992-12-17  |  26.0 KB

  1. Path: sparky!uunet!usc!sol.ctr.columbia.edu!ira.uka.de!uka!uka!news
  2. From: S_JUFFA@iravcl.ira.uka.de (|S| Norbert Juffa)
  3. Newsgroups: comp.sys.intel
  4. Subject: Cyrix 486SLC/DLC compatibility issues and NextStep....
  5. Date: 17 Dec 1992 14:38:25 GMT
  6. Organization: University of Karlsruhe (FRG) - Informatik Rechnerabt.
  7. Lines: 550
  8. Distribution: world
  9. Message-ID: <1gq3d1INNg8g@iraul1.ira.uka.de>
  10. NNTP-Posting-Host: irav1.ira.uka.de
  11. X-News-Reader: VMS NEWS 1.23
  12.  
  13. Compatibility issues: Cyrix Cx486SLC/DLC compared to the Intel 80486SX
  14.  
  15.  
  16. There has been quite a bit of discussion here recently about compatibility
  17. issues involving the Cyrix Cx486SLC and Cx486DLC processors, in particular
  18. about the fact that the NextStep operating system doesn't run on the Cyrix
  19. processors for some reason. During the course of this discussion, we have
  20. heard *a lot of opinions* (e.g. "Intel sucks", "Cyrix sucks") but only *few
  21. facts*. So I thought it might a good idea to throw in a bit of the latter.
  22. I'll try to give the facts as accurate as possible, drawing from personal
  23. experience and Intel's and Cyrix' literature on the 80486DX/SX and 486DLC/SLC.
  24. If you think you have found erroneous information, feel free to contact me:
  25.  
  26. S_JUFFA@IRAVCL.IRA.UKA.DE (Norbert Juffa)
  27.  
  28.  
  29. NOTE: I have no affiliation whatsoever with either Intel or Cyrix!
  30.  
  31.  
  32. The Cyrix 486DLC is a replacement chip for the Intel/AMD 80386DX. The Cyrix
  33. 486SLC is a replacement chip for the Intel/AMD 386SX. While the internals of
  34. the Cyrix 486SLC/DLC are roughly equivalent to those in the Intel 80486SX,
  35. the bus interface of these chips is identical to that of the Intel 80386DX
  36. and 80386SX CPUs, respectively to allow easy replacement of the Intel CPUs
  37. by the Cyrix chips. This also means that the Cx486SLC, as a replacement for
  38. the Intel/AMD 80386SX can only address 16 MB of memory.
  39.  
  40. The 486SLC/DLC CPUs have a register set that is identical to that found on
  41. the Intel 80486SX. However, there are a few subtle differences in the
  42. meaning of certain bits in some systems registers (e.g. cache test registers).
  43. These are covered in more details below. The instruction sets of the Intel
  44. 486SX and the Cyrix Cx486SCL/DLC are identical. The execution times of specific
  45. instructions differ between the two chips, but the overall execution speed
  46. (measured in CPI = clocks per instruction) seems to be about same.
  47.  
  48. On both, the Intel 80486SX and the Cyrix 486SLC/DLC, there is *no* on-chip
  49. FPU (floating point unit). To add floating point capabilities to a 486SX
  50. based system, one would install an 487 'coprocessor', which is basically a
  51. 486DX with a slighty different pin-out, or replace the 486SX with an OverDrive
  52. processor, a clock-doubled 486DX with the 486SX pinout. With the 486SLC/DLC,
  53. one buys a 387 compatible coprocessor to add floating-point capabilities. It
  54. is recommended to get a Cyrix coprocessor for this purpose, since these are
  55. the fastest387 compatible coprocessors available. Also, Cyrix sells kits
  56. consisting of a 486SLC/DLC and a coprocessor that have a favourable value
  57. for money ratio. The floating-point performance of a Cyrix 486DLC + Cyrix
  58. 83D87 combination is about 50% of that of an Intel 486DX running at the same
  59. frequency.
  60.  
  61. The Cyrix 486SLC/DLC have a RISC-like execution unit with a flexible five
  62. stage pipeline, just as the 80486SX has. Unlike the Intel 80486, which has
  63. an 8 kB, 4-way associative cache on chip, the Cx486SLC/DLC only have an 1
  64. kB, 2-way associative cache (the cache on the Cyrix chips can also be
  65. configured to be of the direct mapped type). The 486DLC provides up to 80%
  66. more integer performance than a 386DX at the same clock frequency, with the
  67. average performance gain being about 35%. With the 1 kB on-chip cache enabled,
  68. the 486DLC provides about 75% of the integer performance of a 486SX at the
  69. same clock frequency. With the cache disabled, the 486DLC provides about 65%
  70. of the integer performance of a 486SX. The lower performance of the Cyrix
  71. 486DLC as compared to the Intel 80486SX is mostly due to the slow 386DX bus
  72. interface the 486DLC uses, which is up to 2 times slower than the 486 bus
  73. interface. Some additional performance penalty is imposed by the smaller
  74. cache on the 486SCL/DLC, which provides significantly lower hit rates than
  75. the 8 kB cache of the 80486SX.
  76.  
  77.  
  78. I have personally used the Cyrix 486DLC with my 33.3/40 MHz 386 motherboard,
  79. which uses the Forex chip set. I have also used the Intel RapidCAD and the
  80. C&T 38600DX with this board. These are also replacement chips for the 386DX.
  81. Replacing the 386DX is very easy: Just pull out the AMD/Intel 386DX, then
  82. plug in the replacement chip (here: the Cyrix 486DLC). I haven't had *major*
  83. problems with either of the available replacement chips. The problems
  84. encountered using the Cyrix 486DLC were:
  85.  
  86. 1) When a Cyrix EMC87, Cyrix 83D87 (chips produced prior to November 1991),
  87.    or IIT 3C87 coprocessor is used with the 486DLC, the computer locks up
  88.    completely at times, especially when running protected mode multitasked
  89.    operating systems, such as Windows 3.1 in enhanced mode. This is caused
  90.    by problems with the FSAVE and FRSTOR instructions when using these
  91.    coprocessors. Cyrix tells me that this problem only occurs with first
  92.    generation 486DLCs (read: sample chips like the one I have) and that the
  93.    bug is fixed on the chips that are now available to OEMs and end users.
  94. 2) When using the DBOS 1.0 DOS-extender delivered with the Salford FTN/386
  95.    Fortran compiler, the executable of the DODUC benchmark produced by that
  96.    compiler aborts with a general protection fault. The DODUC executable
  97.    runs fine with the DBOS 1.0 DOS-extender on the Intel 386DX, C&T 38600DX,
  98.    Intel RapidCAD, and Intel 80486DX. I have informed Cyrix of the problem.
  99.  
  100. As for the problems with NextStep on the 486DLC, I have no idea what causes
  101. them. I can think of the following possibilities:
  102.  
  103. 1) NextStep has been tailored extremely close to the 486 programming model,
  104.    not allowing for even slight changes in the architecture (e.g. smaller
  105.    cache), so that the subtle changes needed to adapt the different HW of
  106.    the Cyrix 486SLC/DLC to the 486 programming model can not be accomodated.
  107. 2) NextStep includes code that only runs because it uses officialy undocumented
  108.    features of the 80486 that have not been disclosed by Intel to other vendors.
  109. 3) NextStep includes code that only runs correctly on the 80486 by accident.
  110.    E.g. it could mask the contents of an system register and erroneously
  111.    include a bit that is undefined as per Intel's documentation. This undefined
  112.    bit could then be '1' on the 80486 and '0' on the 486SLC/DLC, for example,
  113.    thus leading to corruption of the system further down the execution path.
  114. 4) For correct execution, NextStep relies on the timing of certain instructions
  115.    that execute slower or faster on the Cx486SLC/DLC than they do on the Intel
  116.    80486SX (a chip that reportedly runs NextStep).
  117. 5) NEXT Corporation used an early and possibly buggy sample chip to do their
  118.    compatibility testing.
  119. 6) There is a bug in the Cyrix 486SLC/DLC that only creeps up if protected
  120.    mode system level programs are used, similar to the problem I encountered
  121.    with the DBOS 1.0 DOS-extender that is described above. However, it is
  122.    interesting to note that several 32-bit operating systems have been
  123.    successfully tested on the 486SLC/DLC (see below).
  124.  
  125.  
  126.  
  127.  
  128. Summary of Intel 486SX / Cyrix 486SLC/DLC implementation details
  129.  
  130.  
  131. Intel 486SX
  132.  
  133. bus interface:   supports burst mode memory accesses with the first
  134.                  memory access taking two clock cycles and subsequent
  135.                  accesses taking only one clock cycle.
  136. prefetch queue:  32 bytes
  137. on-chip cache:   8 KByte unified (code and data) write-through cache.
  138.                  The cache is 4-way set-associative, with 128 sets
  139.                  consisting of four cache lines each. Every cache line
  140.                  consists of 16 bytes. Four write buffers. Hit rate: ~95%
  141.                  Invalidation of cache lines: total cache line
  142. execution unit:  RISC-like execution unit with five stage pipeline. Barrel
  143.                  shifter. Conditional jump taken/not taken: 3/1 clock cycles.
  144.                  Instructions that can be executed in 1 clock cycle if the
  145.                  destination is a register and the source is either a register
  146.                  or an immediate value:
  147.                  ADC,ADD,AND,BSWAP,CMP,DEC,INC,MOV,NEG,NOT,OR,POP,PUSH,SBB,
  148.                  SUB,TEST,XOR
  149.  
  150. Cyrix 486DLC
  151.  
  152. bus interface:   Cx486SLC/DLC uses same the same bus interface as the
  153.                  Intel 386DX/386SX. Highest speed at which memory is
  154.                  accessed is two clock cycles per memory access, there
  155.                  is *no* burst mode. Seven additional signals have been
  156.                  assigned to pins that are not connected on the 386DX/
  157.                  386SX. After power-on or reset, these pins are also
  158.                  electrically disabled on the Cx486SLC/DLC and must be
  159.                  specifically enabled by software. Signals added are used
  160.                  for cache management (KEN#, FLUSH#, RPLSET and RPLVAL#),
  161.                  power management (SUSP#, SUSPA#), and A20 control (A20M#).
  162.                  Each signal can be enabled/disabled independently of the
  163.                  enable/disable status of the other signals.
  164. instruction set: complete Intel 486SX instruction set, including *all*
  165.                  486 specific instructions: WBINVD (write back and
  166.                  invalidate data cache), XADD (exchange and add), CMPXCHG
  167.                  (compare and exchange), BSWAP (Byte Swap), INVLPG
  168.                  (Invalidate TLB entry), INVD (Invalidate Data Cache)
  169. prefetch queue:  16 bytes
  170. on-chip cache:   1 KByte unified (code and data) write-through cache.
  171.                  The cache is 2-way set-associative, with 128 sets
  172.                  consisting of two cache lines each. Every cache line
  173.                  consists of 4 bytes. Two write buffers. Hit rate: ~65%
  174.                  Invalidation of cache lines: single bytes in cache line
  175.                  The cache is disabled after power-on or reset for
  176.                  compatibility reasons and must be enabled by software.
  177.                  Under DOS, you can use a program provided by Cyrix for
  178.                  this purpose. As far as I know, there are no programs
  179.                  available yet for OS/2 and Unix that enable the cache.
  180. execution unit:  RISC-like execution unit with five stage pipeline. Barrel
  181.                  shifter. 16x16 bit hardware multiplier (16x16 bit multiply:
  182.                  3 cycles, 32x32 bit multiply: 7 cycles, AAD: 4 cycles).
  183.                  Conditional jump taken/not taken: 6/1 clock cycles.
  184.                  Instructions that can be executed in 1 clock cycle
  185.                  if the destination is a register and the source is
  186.                  either a register or an immediate value:
  187.                  ADC,ADD,AND,CDQ,CLC,CLD,CMC,CMP,CWD,DEC,INC,MOV,MOVSX,
  188.                  NEG, NOT,OR,SBB,SHLD,SHRD,STC,STD,SUB,TEST,XOR
  189.  
  190.  
  191.  
  192.  
  193. Summary of known compatiblity issues
  194.  
  195. The following is an extract from the Cx486SLC and Cx486DLC Compatibility
  196. Report, Cyrix Corporation 1992, Order No. 94074-00, with some additional
  197. information added by me that has been taken from the Cyrix Cx486SLC
  198. Microprocessor Data Sheet, Cyrix Corporation 1991, Order No. 94073-00,
  199. the i486 Microprocessor Hardware Reference Manual, Intel Corporation,
  200. Order No. 240552-001, and the i486 Microprocessor Programmer's Reference
  201. Manual, Order No. 240486-001.
  202.  
  203.  
  204. SUBSTANTIVE DIFFERENCES - (SOFTWARE)
  205.  
  206. SS-1 Description
  207.  
  208.      The TR4 cache test register holds the cache tag address, valid bits
  209.      and LRU bits for the current cache test operation. The TR5 cache test
  210.      register defines the cache line, cache set and control bits for the
  211.      cache test operation. Since the cache size and organization differ
  212.      between the Cx486SLC/DLC and the 80486, TR4 and TR5 have similar but
  213.      not identical bit definitions on the Cx486SLC/DLC and the 80486.
  214.  
  215.      Analysis
  216.  
  217.      Cache test and diagnostic software - if written to explicitly depend
  218.      on the cache size and organization of the 80486 - may produce unexpected
  219.      results when run on a Cx486SLC/DLC. The results of the programs typically
  220.      have no effect on operating systems or applications software. For proper
  221.      test or diagnosis of the Cx486SLC/DLC cache, software should be used
  222.      which is specifically written to comprehend the Cx486SLC/DLC.
  223.  
  224.  
  225.      80486SX
  226.  
  227.      31                                       11 10  9      7 6     3 2      0
  228.      +------------------------------------------+---+--------+-------+--------+
  229. TR4  |           Tag                            | V |  LRU   | Valid | Unused |
  230.      +------------------------------------------+---+--------+-------+--------+
  231.  
  232.      V     This is the valid bit for the particular cache line which was
  233.            accessed. On a cache lookup, it is a copy of one of the bits
  234.            reported in bits 3..6, which are the valid bits for all four
  235.            cache lines in the selected set. On a cache write, it becomes
  236.            the new valid bit for the particular cache line selected within
  237.            the selected set.
  238.      LRU   On a cache lookup, these are the three LRU bits of the set which
  239.            was accessed. On a cache write, these bits are ignored; the LRU
  240.            bits in the cache are updated by the pseudo-LRU cache replacement
  241.            algorithm. LRU bit 0 (TR4 bit 7) indicates which group of two
  242.            cache lines in the set contains the cache line that has been least
  243.            recently used. The bit is clear when the least recently used line
  244.            is either line 0 or line 1, and is set when the least recently
  245.            used line in the set is either line 2 or line 3. LRU bit 1 (TR4
  246.            bit 8) and LRU bit 2 (TR4 bit 9) indicate which of the two lines
  247.            in the group of lines selected by LRU bit 0 is the least recently
  248.            used, where LRU bit 1 indicates either line 0 (bit=0) or line 1
  249.            (bit=1) and LRU bit 2 indicates either line 2 (bit=0) or line 3
  250.            (bit=1) has been least recently used. A real LRU replacement
  251.            algorithm would have to use 5 bits.
  252.      Valid On a cache lookup, these are the four Valid bits of the set which
  253.            was accessed, where each bit corresponds to one of the four cache
  254.            lines in the set.
  255.  
  256.  
  257.      486SLC/DLC
  258.  
  259.      31                                              9 8   7   6     3 2     0
  260.      +------------------------------------------------+-+-----+-------+-------+
  261. TR4  |           Tag                                  |U| LRU | Valid | 0 0 0 |
  262.      +------------------------------------------------+-+-----+-------+-------+
  263.  
  264.      U     bit 8 is unused.
  265.      LRU   On a cache lookup, this is the LRU bit associated with the cache
  266.            set. On a cache write, this bit is ignored. Bit=0 means line 0
  267.            in the selected set has been least recently used, bit=1 means line
  268.            1 in the selcted set has been least recently used.
  269.      Valid On a cache lookup, these are the four valid bits for the particular
  270.            cache line accessed (one bit per byte in the cache line). On a cache write
  271.            these are the valid bits written into the line.
  272.  
  273.  
  274.  
  275.      80486SX
  276.  
  277.      31                                   11 10               4 3     2 1    0
  278.      +--------------------------------------+------------------+-------+------+
  279. TR5  |       Unused                         |     Set Select   | Entry | Ctrl |
  280.      +--------------------------------------+------------------+-------+------+
  281.  
  282.      Set Select  Selects one of the 128 sets of the cache.
  283.      Entry       Selects one of the four cache lines within the selected set.
  284.      Ctrl        00 write to cache fill buffer, or read from cache read buffer
  285.                  01 perform cache write
  286.                  10 perform cache read
  287.                  11 flush cache (mark all entries invalid)
  288.  
  289.      486SLC/DLC
  290.  
  291.      31                                   11 10               4 3   2   1    0
  292.      +--------------------------------------+------------------+-+-----+------+
  293. TR5  |       Unused                         |     Set Select   |U| Ent | Ctrl |
  294.      +--------------------------------------+------------------+-+-----+------+
  295.  
  296.      Set Select  Selects one of the 128 sets of the cache.
  297.      U           bit 3 is unused
  298.      Entry       Selects one of the two cache lines within the selected set.
  299.      Ctrl        00 ignored
  300.                  01 perform cache write
  301.                  10 perform cache read
  302.                  11 flush cache (mark all entries invalid)
  303.  
  304.  
  305. SS-2 Description
  306.  
  307.      The 80486 NW (not write-through) bit in CR0 disables 80486 write-through
  308.      capability. If the cache disabled bit is on, a write occurs to a cache-hit
  309.      location, and NW is a 1, then the 80486 does not perform an external write
  310.      bus cycle. This bit is not available on the Cx486SLC/DLC and is fixed at
  311.      zero.
  312.  
  313.      Analysis
  314.  
  315.      The NW bit on the 80486 allows for a capability of self-contained
  316.      processing once a program has been loaded into the cache and the cache
  317.      disabled. Programs that use this feature will work on the Cx486SLC/DLC
  318.      with writes happening on external write bus cycles.
  319.  
  320.  
  321. SS-3 Description
  322.  
  323.      On systems with hardware FPUs, whose FPU ERROR signal is routed to the
  324.      CPU ERROR signal (NE bit set on the 80486DX), a floating point error is
  325.      normally acknowledged by the CPU upon execution of the next floating
  326.      point instruction. If the next floating point instruction is a load single
  327.      or load double precision that would have generated a General Protection
  328.      (GP) fault, it is possible for the Cx486SLC/DLC to acknowledge the GP
  329.      fault before the coprocessor error fault. The 80486 acknowledges the
  330.      coprocessor error first.
  331.  
  332.      Analysis
  333.  
  334.      This condition (FPU ERROR connected to CPU ERROR) does not occur in PC
  335.      compatible designs.
  336.  
  337.  
  338.  
  339. INFORMATIONAL DIFFERENCES - (SOFTWARE)
  340.  
  341. IS-1  Description
  342.  
  343.       Certain 80486 flag bits in the flags register are documented by Intel
  344.       as undefined after execution of certain instructions. Testing at Cyrix
  345.       has shown that the final states of theses flag bits are in fact
  346.       unpredictable. The Cx486SLC/DLC leaves the flag bit values unmodified
  347.       after execution of the same instructions.
  348.  
  349.       Analysis
  350.  
  351.       Since the flag bits are documented by Intel to be undefined after certain
  352.       operations, software can not reliably use the resulting flag bit values.
  353.  
  354.  
  355. IS-2  Description
  356.  
  357.       Early revision 80486SX CPUs have a programmable Numeric Exception control
  358.       bit in control register CR0 (bit 28). This bit was intended to control
  359.       whether numeric execptions are handled internally (NE=1) or driven
  360.       externally on a discrete CPU pin (NE=0). On these 80486SXs, the NE bit
  361.       can be set to a one even though numeric execptions can not be handled
  362.       internally due to the fact that no coprocessor exists. Reading the NE
  363.       bit on the coprocessor exists. Reading the NE bit on the Cx486SLC/DLC
  364.       always returns a zero indicating that numeric exceptions are always
  365.       handled externally.
  366.  
  367.       Analysis
  368.  
  369.       Since the Cx486SLC/DLC does not have an on-board floating point unit, the
  370.       coprocessor interface (including numeric exception signaling) operates in
  371.       a fashion compatible with the 80386.The Cx486SLC/DLC and 80386 use an
  372.       external coprocessor which generates the numeric exception and always
  373.       return zero when the NE bit is read.
  374.  
  375.  
  376. IS-3  Description
  377.  
  378.       When trying to reference CR1 in protected mode while not at the highest
  379.       privilege level (level 0), the 80486 generates an Invalid Opcode fault,
  380.       whereas the Cx486SLC/DLC generate a General Protection (GP) fault.
  381.  
  382.       Analysis
  383.  
  384.       The Cx486SLC/DLC and 80486 do not define the bits in the CR1 register.
  385.       Since there are no valid bits in the CR1 register, any exception taken,
  386.       whether it is a GP fault or Invalid Opcode fault, will signal that an
  387.       invalid operation has taken place.
  388.  
  389.  
  390. IS-4  Description
  391.  
  392.       When using the Translation Lookaside Buffer (TLB) test registers, the
  393.       undefined bits in TR7 may differ between the 80486 and the Cx486SLC/DLC
  394.       when a look-up miss (TR7 bit 4 is clear) occurs. This includes the REP
  395.       field (bits 2-3).
  396.  
  397.       Analysis
  398.  
  399.       The majority of the bits in TR7 are documented by Intel to be undefined
  400.       after a TLB look-up miss. Therefore, software programs can not reliably
  401.       use the resulting values of these undefined bits.
  402.  
  403.  
  404. IS-5  Description
  405.  
  406.       Cx486SLC/DLC reads and writes to Debug Register 4 (DR4) and Debug
  407.       Register 5 (DR5) result in accesses to Debug Register 6 (DR6) and
  408.       Debug Register 7 (DR7), respectively. Accessing DR4 and DR5 on the
  409.       80486 produces an Invalid Opcode fault.
  410.  
  411.       Analysis
  412.  
  413.       DR4 and DR5 are documented as undefined by Intel on the 80486. Since
  414.       the results are undefined, software programs can not reliably use the
  415.       register results.
  416.  
  417.  
  418. IS-6  Description
  419.  
  420.       Writing duplicate TLB tags using the TLB test registers generates
  421.       different results on the Cx486SLC/DLC than on the 80486 when the
  422.       duplicate address is looked up. The results of writing duplicate
  423.       TLB tags is documented as undefined by Intel.
  424.  
  425.       Analysis
  426.  
  427.       Writing duplicate TLB tags using the TLB test registers is an unsupported
  428.       operation. The Cx486SLC/DLC and 80486 return undefined results when
  429.       looking up the resulting address. Since the results are undefined,
  430.       software programs can not reliably use the register results.
  431.  
  432.  
  433. IS-7  Description
  434.  
  435.       The 80486 imposes a performance penalty in order to report debug faults
  436.       precisely. The Cx486SLC/DLC reports debug faults precisely without a
  437.       performance penalty (except for a repeated MOVS instruction).
  438.  
  439.       Analysis
  440.  
  441.       The Cx486SLC/DLC provides superior debugging capability.
  442.  
  443.  
  444. IS-8  Description
  445.  
  446.       The 80486 writes zeroes to the destination register when executing a
  447.       Bit-Scan Forward (BSF) instruction if all zeroes are found in the
  448.       specified bit map. The Cx486DLC/DLC leaves the destination register
  449.       unchanged under this condition.
  450.  
  451.       Analysis
  452.  
  453.       The value in the destination register of a BSF instruction is specified
  454.       by Intel to be undefined when a one bit is not found in the source
  455.       operand. Since the results are undefined, software programs can not be
  456.       reliably use the register results.
  457.  
  458.  
  459. IS-9  Description
  460.  
  461.       Memory versions of the instructions ADC, ADD, AND, DEC, INC, MOVS, NEG,
  462.       NOT, OR, RCl, ROL, ROR, SAl, SAR, SBB, SUB, SHL, SHLD, SHR, SHRD, XCHG,
  463.       and XOR read the destination memory, operate on it, and write it back to
  464.       memory. The Cx486SLC/DLC checks the writability of the destination before
  465.       performing these instructions. On non-writable locations, the Cx486SLC/
  466.       DLC faults before starting the instruction. The 80486 performs the read,
  467.       sets the read location acessed bit, and modifies the flags before
  468.       faulting.
  469.  
  470.       Analysis
  471.  
  472.       By checking the writability first prior to execution of the instruction
  473.       (at no performance penalty), the Cx486SLC/DLC avoids unnecessary
  474.       operations. Leaving the accessed bit and flag contents in their original
  475.       state is prefered if the instruction is restarted.
  476.  
  477.  
  478. IS-10 Description
  479.  
  480.       In the case above, if the read locatuion is also not present, the 80486
  481.       will attempt the read, take a page fault, reload the page, restart the
  482.       instruction, and then take a GP fault. The Cx486SLC/DLC will take a GP
  483.       fault.
  484.  
  485.       Analysis
  486.  
  487.       The 80486 wastes time loading the requested page before taking the
  488.       required GP fault. The GP fault is eventually detected by both the 80486
  489.       and the Cx486SLC/DLC.
  490.  
  491.  
  492. IS-11 Description
  493.  
  494.       If a locked instruction accesses a memory page marked as not present, the
  495.       80486 reports in the error code that the access type was a write while
  496.       the Cx486SLC/DLC reports that the access type was a read.
  497.  
  498.       Analysis
  499.  
  500.       Since the page is not present in either case (read or write), the same
  501.       page fault is taken by both the Cx486SLC/DLC and the 80486.
  502.  
  503.  
  504. IS-12 Description
  505.  
  506.       When alignment checking is enabled an an ENTER instruction that misaligns
  507.       the stack is executed, the 80486 generates an alingment check fault even
  508.       though the misaligned stack has not been accessed. The Cx486SLC/DLC
  509.       generates the aligment check fault only when the misaligned stack is
  510.       accessed.
  511.  
  512.       Analysis
  513.  
  514.       The Cx486SLC/DLC correctly generates an alignment check fault only when
  515.       a misaligned stack is accessed. The 80486 unnecessarily takes the fault
  516.       in the case described.
  517.  
  518.  
  519. IS-13 Description
  520.  
  521.       When executing a REP LOOPE (repeated loop while equal) instruction, the
  522.       80486 does not perform the "if equal" function of the instruction. The
  523.       Cx486SLC/DLC does perfrom the "if equal" check under the same
  524.       circumstances.
  525.  
  526.       Analysis
  527.  
  528.       The 80486 execution should be considered incorrect. The Cx486SCL/DLC
  529.       correctly executes this instruction sequence.
  530.  
  531.  
  532. IS-14 Description
  533.  
  534.       The 80486 incorrectly asserts the LOCK# pin while enterinf the illegal
  535.       instruction exception handler when using the LOCK prefix on instructions
  536.       other than those allowed (Only BTS, BTR, BTC, XCHG, INC, DEC, NOT, NEG,
  537.       ADD, ADC, SUB, SBB, AND, OR, XOR are allowed). The Cx486SLC/DLC correctly
  538.       does not assert LOCK# in this case.
  539.  
  540.       Analysis
  541.  
  542.       When using the 80486 in a multi-processor environment, the bus may be
  543.       locked unnecessarily causing performance degradation.
  544.  
  545.  
  546.  
  547. Operating systems/operating environments tested with the Cx486SLC/DLC:
  548.  
  549. Digital Research: Concurrent DOS 386 5.0, DR-DOS 6.0
  550. Ergo:             OS/386
  551. IBM:              IBM DOS 3.3, IBM DOS 4.0, OS/2 2.0, OS/2 SE 1.3
  552. IGC:              VM/386 2.01
  553. Interactive:      Interactive Unix 3.2
  554. Mark Williams:    Coherent 3.1, Coherent 3.2
  555. Microsoft:        MS-DOS 3.3, MS-DOS 4.01, MS-DOS 5.0, Windows 3.0, Windows 3.1
  556. Pharlap:          DOS-Extender 286, DOS-Extender 386
  557. Quarterdeck:      Desqview 386 2.32
  558. Rational:         DOS/4G
  559. SCO:              SCO Open Desktop, SCO Unix, SCO Xenix 2.3.2c
  560. Symantec:         Norton Desktop for Windows 1.0
  561. UHC:              Developers Environment, Network Module, X11R4/Motif Windowing
  562.                   Module, UNIX Release 4.0 Ver. 3.6
  563.