Re: [PATCH] Runtime memory barrier patching

From: Ulrich Drepper (drepper@redhat.com)
Date: Mon Apr 21 2003 - 16:43:38 EST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Linus Torvalds wrote:

> They may _work_ for intel, but quite frankly they suck for most Intel (and
> probably non-intel too) CPU's. Using prefixes tends to almost always mess
> up the instruction decoders on most CPU's out there.

Indeed, using prefixes is terrible. This is what is used in gas:

    {0x90}; /* nop */
  static const char f32_2[] =
    {0x89,0xf6}; /* movl %esi,%esi */
  static const char f32_3[] =
    {0x8d,0x76,0x00}; /* leal 0(%esi),%esi */
  static const char f32_4[] =
    {0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
  static const char f32_5[] =
    {0x90, /* nop */
     0x8d,0x74,0x26,0x00}; /* leal 0(%esi,1),%esi */
  static const char f32_6[] =
    {0x8d,0xb6,0x00,0x00,0x00,0x00}; /* leal 0L(%esi),%esi */
  static const char f32_7[] =
    {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
  static const char f32_8[] =
    {0x90, /* nop */
     0x8d,0xb4,0x26,0x00,0x00,0x00,0x00}; /* leal 0L(%esi,1),%esi */
  static const char f32_9[] =
    {0x89,0xf6, /* movl %esi,%esi */
     0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
  static const char f32_10[] =
    {0x8d,0x76,0x00, /* leal 0(%esi),%esi */
     0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
  static const char f32_11[] =
    {0x8d,0x74,0x26,0x00, /* leal 0(%esi,1),%esi */
     0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
  static const char f32_12[] =
    {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
     0x8d,0xbf,0x00,0x00,0x00,0x00}; /* leal 0L(%edi),%edi */
  static const char f32_13[] =
    {0x8d,0xb6,0x00,0x00,0x00,0x00, /* leal 0L(%esi),%esi */
     0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
  static const char f32_14[] =
    {0x8d,0xb4,0x26,0x00,0x00,0x00,0x00, /* leal 0L(%esi,1),%esi */
     0x8d,0xbc,0x27,0x00,0x00,0x00,0x00}; /* leal 0L(%edi,1),%edi */
  static const char f32_15[] =
    {0xeb,0x0d,0x90,0x90,0x90,0x90,0x90, /* jmp .+15; lotsa nops */
     0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90};

- --
- --------------. ,-. 444 Castro Street
Ulrich Drepper \ ,-----------------' \ Mountain View, CA 94041 USA
Red Hat `--' drepper at redhat.com `---------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+pGYK2ijCOnn/RHQRArJ7AJ4gT4Di95o6wYonrmb+OGvNlbHvvQCfcohZ
nICs/UdZHeqwGs6Y4QJhhAA=
=JZN7
-----END PGP SIGNATURE-----

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Apr 23 2003 - 22:00:31 EST