From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keir Fraser Subject: Re: [PATCH] x86-32: use __builtin_{memcpy,memset} Date: Tue, 11 May 2010 11:39:43 +0100 Message-ID: References: <4BE939F602000078000023EA@vpn.id2.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="B_3356422790_30964906" Return-path: In-Reply-To: <4BE939F602000078000023EA@vpn.id2.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Jan Beulich , "xen-devel@lists.xensource.com" Cc: Charles Arnold List-Id: xen-devel@lists.xenproject.org --B_3356422790_30964906 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit On 11/05/2010 10:05, "Jan Beulich" wrote: > Following a change in Linux 2.6.33, make x86-32 always use > __builtin_mem{cpy,set}() on gcc 4.0+. This particularly works around > certain intermediate gcc revisions generating out-of-range-array-index > warnings with the current inline implementation. > > It may be worthwhile considering to make this the case for x86-64 too. > > At the same time eliminate the redundant inline assembly in the C > file, and instead use the inline functions coming from the header. Hm, well, I hate having to change this stuff as we always seem to end up broken on some gcc or other. But otoh this will eliminate a bunch of code if we do this unconditionally, and I'm particularly not keen on doing this only for x86-32 and particular versions of gcc. I suggest the attached patch: it should work fine so long as all our supported versions of gcc have __builtin_memcpy and __builtin_memset. Given we nowadays only support GCC 3.4+, I imagine we are okay in this regard. What do you think to this alternative patch? -- Keir > Signed-off-by: Jan Beulich > > --- 2010-05-04.orig/xen/arch/x86/string.c 2007-11-26 16:57:03.000000000 +0100 > +++ 2010-05-04/xen/arch/x86/string.c 2010-05-11 09:45:27.000000000 +0200 > @@ -11,44 +11,13 @@ > #undef memcpy > void *memcpy(void *dest, const void *src, size_t n) > { > - long d0, d1, d2; > - > - asm volatile ( > -#ifdef __i386__ > - " rep movsl ; " > -#else > - " rep movsq ; " > - " testb $4,%b4 ; " > - " je 0f ; " > - " movsl ; " > - "0: ; " > -#endif > - " testb $2,%b4 ; " > - " je 1f ; " > - " movsw ; " > - "1: testb $1,%b4 ; " > - " je 2f ; " > - " movsb ; " > - "2: " > - : "=&c" (d0), "=&D" (d1), "=&S" (d2) > - : "0" (n/sizeof(long)), "q" (n), "1" (dest), "2" (src) > - : "memory"); > - > - return dest; > + return __variable_memcpy(dest, src, n); > } > > #undef memset > void *memset(void *s, int c, size_t n) > { > - long d0, d1; > - > - asm volatile ( > - "rep stosb" > - : "=&c" (d0), "=&D" (d1) > - : "a" (c), "1" (s), "0" (n) > - : "memory"); > - > - return s; > + return __memset_generic(s, c, n); > } > > #undef memmove > --- 2010-05-04.orig/xen/include/asm-x86/string.h 2009-10-07 13:31:36.000000000 > +0200 > +++ 2010-05-04/xen/include/asm-x86/string.h 2010-05-11 10:21:04.000000000 > +0200 > @@ -16,6 +16,11 @@ static inline void *__variable_memcpy(vo > return to; > } > > +#define __HAVE_ARCH_MEMCPY > +#if defined(__i386__) && __GNUC__ >= 4 > +#define memcpy(t, f, n) __builtin_memcpy(t, f, n) > +#else > + > /* > * This looks horribly ugly, but the compiler can optimize it totally, > * as the count is constant. > @@ -95,7 +100,6 @@ static always_inline void * __constant_m > return to; > } > > -#define __HAVE_ARCH_MEMCPY > /* align source to a 64-bit boundary */ > static always_inline > void *__var_memcpy(void *t, const void *f, size_t n) > @@ -121,11 +125,13 @@ void *__memcpy(void *t, const void *f, s > __var_memcpy((t),(f),(n))); > } > > +#endif /* !__i386__ || __GNUC__ < 4 */ > + > /* Some version of gcc don't have this builtin. It's non-critical anyway. */ > #define __HAVE_ARCH_MEMMOVE > extern void *memmove(void *dest, const void *src, size_t n); > > -static inline void *__memset_generic(void *s, char c, size_t count) > +static inline void *__memset_generic(void *s, int c, size_t count) > { > long d0, d1; > __asm__ __volatile__ ( > @@ -134,6 +140,11 @@ static inline void *__memset_generic(voi > return s; > } > > +#define __HAVE_ARCH_MEMSET > +#if defined(__i386__) && __GNUC__ >= 4 > +#define memset(s, c, n) __builtin_memset(s, c, n) > +#else > + > /* we might want to write optimized versions of these later */ > #define __constant_count_memset(s,c,count) __memset_generic((s),(c),(count)) > > @@ -238,11 +249,12 @@ static always_inline void *__constant_c_ > #define MEMSET_PATTERN_MUL 0x01010101UL > #endif > > -#define __HAVE_ARCH_MEMSET > #define memset(s, c, count) (__memset((s),(c),(count))) > #define __memset(s, c, count) \ > (__builtin_constant_p(c) ? \ > __constant_c_x_memset((s),(MEMSET_PATTERN_MUL*(unsigned char)(c)),(count)) : > \ > __var_x_memset((s),(c),(count))) > > +#endif /* !__i386__ || __GNUC__ < 4 */ > + > #endif /* __X86_STRING_H__ */ > > > --B_3356422790_30964906 Content-Type: application/octet-stream; name="00-string" Content-Disposition: attachment; filename="00-string" Content-Transfer-Encoding: base64 ZGlmZiAtciA2MGIzNDE3YjE0OTkgeGVuL2FyY2gveDg2L3N0cmluZy5jCi0tLSBhL3hlbi9h cmNoL3g4Ni9zdHJpbmcuYwlUdWUgTWF5IDExIDExOjIzOjU0IDIwMTAgKzAxMDAKKysrIGIv eGVuL2FyY2gveDg2L3N0cmluZy5jCVR1ZSBNYXkgMTEgMTE6Mzc6MDkgMjAxMCArMDEwMApA QCAtMTQsMjUgKzE0LDEyIEBACiAgICAgbG9uZyBkMCwgZDEsIGQyOwogCiAgICAgYXNtIHZv bGF0aWxlICgKLSNpZmRlZiBfX2kzODZfXwotICAgICAgICAiICAgcmVwIG1vdnNsICAgICAg ICA7ICIKLSNlbHNlCi0gICAgICAgICIgICByZXAgbW92c3EgICAgICAgIDsgIgotICAgICAg ICAiICAgdGVzdGIgJDQsJWI0ICAgICA7ICIKLSAgICAgICAgIiAgIGplIDBmICAgICAgICAg ICAgOyAiCi0gICAgICAgICIgICBtb3ZzbCAgICAgICAgICAgIDsgIgotICAgICAgICAiMDog ICAgICAgICAgICAgICAgICA7ICIKLSNlbmRpZgotICAgICAgICAiICAgdGVzdGIgJDIsJWI0 ICAgICA7ICIKLSAgICAgICAgIiAgIGplIDFmICAgICAgICAgICAgOyAiCi0gICAgICAgICIg ICBtb3ZzdyAgICAgICAgICAgIDsgIgotICAgICAgICAiMTogdGVzdGIgJDEsJWI0ICAgICA7 ICIKLSAgICAgICAgIiAgIGplIDJmICAgICAgICAgICAgOyAiCi0gICAgICAgICIgICBtb3Zz YiAgICAgICAgICAgIDsgIgotICAgICAgICAiMjogICAgICAgICAgICAgICAgICAgICIKKyAg ICAgICAgIiAgIHJlcCA7IG1vdnMiX19PUyIgOyAiCisgICAgICAgICIgICBtb3YgJTQsJTMg ICAgICAgIDsgIgorICAgICAgICAiICAgcmVwIDsgbW92c2IgICAgICAgICIKICAgICAgICAg OiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpCi0gICAgICAgIDogIjAiIChu L3NpemVvZihsb25nKSksICJxIiAobiksICIxIiAoZGVzdCksICIyIiAoc3JjKQotICAgICAg ICA6ICJtZW1vcnkiKTsKKyAgICAgICAgOiAiMCIgKG4vQllURVNfUEVSX0xPTkcpLCAiciIg KG4lQllURVNfUEVSX0xPTkcpLCAiMSIgKGRlc3QpLCAiMiIgKHNyYykKKyAgICAgICAgOiAi bWVtb3J5IiApOwogCiAgICAgcmV0dXJuIGRlc3Q7CiB9CkBAIC01NSw3ICs0Miw3IEBACiB2 b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCiB7 CiAgICAgbG9uZyBkMCwgZDEsIGQyOwotIAorCiAgICAgaWYgKCBkZXN0IDwgc3JjICkKICAg ICAgICAgcmV0dXJuIG1lbWNweShkZXN0LCBzcmMsIG4pOwogCmRpZmYgLXIgNjBiMzQxN2Ix NDk5IHhlbi9pbmNsdWRlL2FzbS14ODYvc3RyaW5nLmgKLS0tIGEveGVuL2luY2x1ZGUvYXNt LXg4Ni9zdHJpbmcuaAlUdWUgTWF5IDExIDExOjIzOjU0IDIwMTAgKzAxMDAKKysrIGIveGVu L2luY2x1ZGUvYXNtLXg4Ni9zdHJpbmcuaAlUdWUgTWF5IDExIDExOjM3OjA5IDIwMTAgKzAx MDAKQEAgLTMsMjQ2ICszLDE0IEBACiAKICNpbmNsdWRlIDx4ZW4vY29uZmlnLmg+CiAKLXN0 YXRpYyBpbmxpbmUgdm9pZCAqX192YXJpYWJsZV9tZW1jcHkodm9pZCAqdG8sIGNvbnN0IHZv aWQgKmZyb20sIHNpemVfdCBuKQotewotICAgIGxvbmcgZDAsIGQxLCBkMjsKLSAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICIgICByZXAgOyBtb3ZzIl9fT1MiXG4iCi0g ICAgICAgICIgICBtb3YgJTQsJTMgICAgICAgXG4iCi0gICAgICAgICIgICByZXAgOyBtb3Zz YiAgICAgXG4iCi0gICAgICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQy KQotICAgICAgICA6ICIwIiAobi9CWVRFU19QRVJfTE9ORyksICJyIiAobiVCWVRFU19QRVJf TE9ORyksICIxIiAodG8pLCAiMiIgKGZyb20pCi0gICAgICAgIDogIm1lbW9yeSIgKTsKLSAg ICByZXR1cm4gdG87Ci19CisjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQorI2RlZmluZSBt ZW1jcHkodCxmLG4pIChfX2J1aWx0aW5fbWVtY3B5KCh0KSwoZiksKG4pKSkKIAotLyoKLSAq IFRoaXMgbG9va3MgaG9ycmlibHkgdWdseSwgYnV0IHRoZSBjb21waWxlciBjYW4gb3B0aW1p emUgaXQgdG90YWxseSwKLSAqIGFzIHRoZSBjb3VudCBpcyBjb25zdGFudC4KLSAqLwotc3Rh dGljIGFsd2F5c19pbmxpbmUgdm9pZCAqIF9fY29uc3RhbnRfbWVtY3B5KAotICAgIHZvaWQg KiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBuKQotewotICAgIHN3aXRjaCAoIG4g KQotICAgIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHJldHVybiB0bzsKLSAgICBjYXNlIDE6 Ci0gICAgICAgICoodTggKil0byA9ICooY29uc3QgdTggKilmcm9tOwotICAgICAgICByZXR1 cm4gdG87Ci0gICAgY2FzZSAyOgotICAgICAgICAqKHUxNiAqKXRvID0gKihjb25zdCB1MTYg Kilmcm9tOwotICAgICAgICByZXR1cm4gdG87Ci0gICAgY2FzZSAzOgotICAgICAgICAqKHUx NiAqKXRvID0gKihjb25zdCB1MTYgKilmcm9tOwotICAgICAgICAqKDIrKHU4ICopdG8pID0g KigyKyhjb25zdCB1OCAqKWZyb20pOwotICAgICAgICByZXR1cm4gdG87Ci0gICAgY2FzZSA0 OgotICAgICAgICAqKHUzMiAqKXRvID0gKihjb25zdCB1MzIgKilmcm9tOwotICAgICAgICBy ZXR1cm4gdG87Ci0gICAgY2FzZSA1OgotICAgICAgICAqKHUzMiAqKXRvID0gKihjb25zdCB1 MzIgKilmcm9tOwotICAgICAgICAqKDQrKHU4ICopdG8pID0gKig0Kyhjb25zdCB1OCAqKWZy b20pOwotICAgICAgICByZXR1cm4gdG87Ci0gICAgY2FzZSA2OgotICAgICAgICAqKHUzMiAq KXRvID0gKihjb25zdCB1MzIgKilmcm9tOwotICAgICAgICAqKDIrKHUxNiAqKXRvKSA9ICoo MisoY29uc3QgdTE2ICopZnJvbSk7Ci0gICAgICAgIHJldHVybiB0bzsKLSAgICBjYXNlIDc6 Ci0gICAgICAgICoodTMyICopdG8gPSAqKGNvbnN0IHUzMiAqKWZyb207Ci0gICAgICAgICoo MisodTE2ICopdG8pID0gKigyKyhjb25zdCB1MTYgKilmcm9tKTsKLSAgICAgICAgKig2Kyh1 OCAqKXRvKSA9ICooNisoY29uc3QgdTggKilmcm9tKTsKLSAgICAgICAgcmV0dXJuIHRvOwot ICAgIGNhc2UgODoKLSAgICAgICAgKih1NjQgKil0byA9ICooY29uc3QgdTY0ICopZnJvbTsK LSAgICAgICAgcmV0dXJuIHRvOwotICAgIGNhc2UgMTI6Ci0gICAgICAgICoodTY0ICopdG8g PSAqKGNvbnN0IHU2NCAqKWZyb207Ci0gICAgICAgICooMisodTMyICopdG8pID0gKigyKyhj b25zdCB1MzIgKilmcm9tKTsKLSAgICAgICAgcmV0dXJuIHRvOwotICAgIGNhc2UgMTY6Ci0g ICAgICAgICoodTY0ICopdG8gPSAqKGNvbnN0IHU2NCAqKWZyb207Ci0gICAgICAgICooMSso dTY0ICopdG8pID0gKigxKyhjb25zdCB1NjQgKilmcm9tKTsKLSAgICAgICAgcmV0dXJuIHRv OwotICAgIGNhc2UgMjA6Ci0gICAgICAgICoodTY0ICopdG8gPSAqKGNvbnN0IHU2NCAqKWZy b207Ci0gICAgICAgICooMSsodTY0ICopdG8pID0gKigxKyhjb25zdCB1NjQgKilmcm9tKTsK LSAgICAgICAgKig0Kyh1MzIgKil0bykgPSAqKDQrKGNvbnN0IHUzMiAqKWZyb20pOwotICAg ICAgICByZXR1cm4gdG87Ci0gICAgfQotI2RlZmluZSBDT01NT04oeCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX19hc21fXyBfX3ZvbGF0aWxlX18g KCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgInJlcCA7IG1vdnMi X19PUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB4ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIDog Ij0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSAgICAgICAgICAgIFwKLSAgICAg ICAgOiAiMCIgKG4vQllURVNfUEVSX0xPTkcpLCAiMSIgKHRvKSwgIjIiIChmcm9tKSAgXAot ICAgICAgICA6ICJtZW1vcnkiICk7Ci0gICAgewotICAgICAgICBsb25nIGQwLCBkMSwgZDI7 Ci0gICAgICAgIHN3aXRjaCAoIG4gJSBCWVRFU19QRVJfTE9ORyApCi0gICAgICAgIHsKLSAg ICAgICAgY2FzZSAwOiBDT01NT04oIiIpOyByZXR1cm4gdG87Ci0gICAgICAgIGNhc2UgMTog Q09NTU9OKCJcblx0bW92c2IiKTsgcmV0dXJuIHRvOwotICAgICAgICBjYXNlIDI6IENPTU1P TigiXG5cdG1vdnN3Iik7IHJldHVybiB0bzsKLSAgICAgICAgY2FzZSAzOiBDT01NT04oIlxu XHRtb3Zzd1xuXHRtb3ZzYiIpOyByZXR1cm4gdG87Ci0gICAgICAgIGNhc2UgNDogQ09NTU9O KCJcblx0bW92c2wiKTsgcmV0dXJuIHRvOwotICAgICAgICBjYXNlIDU6IENPTU1PTigiXG5c dG1vdnNsXG5cdG1vdnNiIik7IHJldHVybiB0bzsKLSAgICAgICAgY2FzZSA2OiBDT01NT04o IlxuXHRtb3ZzbFxuXHRtb3ZzdyIpOyByZXR1cm4gdG87Ci0gICAgICAgIGNhc2UgNzogQ09N TU9OKCJcblx0bW92c2xcblx0bW92c3dcblx0bW92c2IiKTsgcmV0dXJuIHRvOwotICAgICAg ICB9Ci0gICAgfQotI3VuZGVmIENPTU1PTgotICAgIHJldHVybiB0bzsKLX0KLQotI2RlZmlu ZSBfX0hBVkVfQVJDSF9NRU1DUFkKLS8qIGFsaWduIHNvdXJjZSB0byBhIDY0LWJpdCBib3Vu ZGFyeSAqLwotc3RhdGljIGFsd2F5c19pbmxpbmUKLXZvaWQgKl9fdmFyX21lbWNweSh2b2lk ICp0LCBjb25zdCB2b2lkICpmLCBzaXplX3QgbikKLXsKLSAgICBpbnQgb2ZmID0gKHVuc2ln bmVkIGxvbmcpZiAmIDB4NzsKLSAgICAvKiBqdXN0IGRvIGFsaWdubWVudCBpZiBuZWVkZWQg YW5kIGlmIHNpemUgaXMgd29ydGggKi8KLSAgICBpZiAoIChuID4gMzIpICYmIG9mZiApIHsK LSAgICAgICAgc2l6ZV90IG4xID0gOCAtIG9mZjsKLSAgICAgICAgX192YXJpYWJsZV9tZW1j cHkodCwgZiwgbjEpOwotICAgICAgICBfX3ZhcmlhYmxlX21lbWNweSh0ICsgbjEsIGYgKyBu MSwgbiAtIG4xKTsKLSAgICAgICAgcmV0dXJuIHQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIHJldHVybiAoX192YXJpYWJsZV9tZW1jcHkodCwgZiwgbikpOwotICAgIH0KLX0KLQot I2RlZmluZSBtZW1jcHkodCxmLG4pIChfX21lbWNweSgodCksKGYpLChuKSkpCi1zdGF0aWMg YWx3YXlzX2lubGluZQotdm9pZCAqX19tZW1jcHkodm9pZCAqdCwgY29uc3Qgdm9pZCAqZiwg c2l6ZV90IG4pCi17Ci0gICAgcmV0dXJuIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/Ci0g ICAgICAgICAgICBfX2NvbnN0YW50X21lbWNweSgodCksKGYpLChuKSkgOgotICAgICAgICAg ICAgX192YXJfbWVtY3B5KCh0KSwoZiksKG4pKSk7Ci19Ci0KLS8qIFNvbWUgdmVyc2lvbiBv ZiBnY2MgZG9uJ3QgaGF2ZSB0aGlzIGJ1aWx0aW4uIEl0J3Mgbm9uLWNyaXRpY2FsIGFueXdh eS4gKi8KKy8qIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIGRvbid0IGhhdmUgdGhpcyBidWlsdGlu LiBJdCdzIG5vbi1jcml0aWNhbCBhbnl3YXkuICovCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01F TU1PVkUKIGV4dGVybiB2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNy Yywgc2l6ZV90IG4pOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKl9fbWVtc2V0X2dlbmVyaWMo dm9pZCAqcywgY2hhciBjLCBzaXplX3QgY291bnQpCi17Ci0gICAgbG9uZyBkMCwgZDE7Ci0g ICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAicmVwIDsgc3Rvc2IiCi0gICAg ICAgIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSA6ICJhIiAoYyksICIxIiAocyksICIwIiAo Y291bnQpIDogIm1lbW9yeSIgKTsKLSAgICByZXR1cm4gczsKLX0KLQotLyogd2UgbWlnaHQg d2FudCB0byB3cml0ZSBvcHRpbWl6ZWQgdmVyc2lvbnMgb2YgdGhlc2UgbGF0ZXIgKi8KLSNk ZWZpbmUgX19jb25zdGFudF9jb3VudF9tZW1zZXQocyxjLGNvdW50KSBfX21lbXNldF9nZW5l cmljKChzKSwoYyksKGNvdW50KSkKLQotLyoKLSAqIG1lbXNldCh4LDAseSkgaXMgYSByZWFz b25hYmx5IGNvbW1vbiB0aGluZyB0byBkbywgc28gd2Ugd2FudCB0byBmaWxsCi0gKiB0aGlu Z3MgMzIgYml0cyBhdCBhIHRpbWUgZXZlbiB3aGVuIHdlIGRvbid0IGtub3cgdGhlIHNpemUg b2YgdGhlCi0gKiBhcmVhIGF0IGNvbXBpbGUtdGltZS4uCi0gKi8KLXN0YXRpYyBpbmxpbmUg dm9pZCAqX19jb25zdGFudF9jX21lbXNldCh2b2lkICpzLCB1bnNpZ25lZCBsb25nIGMsIHNp emVfdCBjb3VudCkKLXsKLSAgICBsb25nIGQwLCBkMTsKLSAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXygKLSAgICAgICAgIiAgIHJlcCA7IHN0b3MiX19PUyJcbiIKLSAgICAgICAgIiAgIG1v diAgJTMsJTQgICAgICBcbiIKLSAgICAgICAgIiAgIHJlcCA7IHN0b3NiICAgICBcbiIKLSAg ICAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpCi0gICAgICAgIDogImEiIChjKSwgInIi IChjb3VudCVCWVRFU19QRVJfTE9ORyksCi0gICAgICAgICAgIjAiIChjb3VudC9CWVRFU19Q RVJfTE9ORyksICIxIiAocykKLSAgICAgICAgOiAibWVtb3J5IiApOwotICAgIHJldHVybiBz OwotfQotCi0vKgotICogVGhpcyBsb29rcyBob3JyaWJseSB1Z2x5LCBidXQgdGhlIGNvbXBp bGVyIGNhbiBvcHRpbWl6ZSBpdCB0b3RhbGx5LAotICogYXMgd2UgYnkgbm93IGtub3cgdGhh dCBib3RoIHBhdHRlcm4gYW5kIGNvdW50IGlzIGNvbnN0YW50Li4KLSAqLwotc3RhdGljIGFs d2F5c19pbmxpbmUgdm9pZCAqX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoCi0gICAg dm9pZCAqcywgdW5zaWduZWQgbG9uZyBwYXR0ZXJuLCBzaXplX3QgY291bnQpCi17Ci0gICAg c3dpdGNoICggY291bnQgKQotICAgIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIHJldHVybiBz OwotICAgIGNhc2UgMToKLSAgICAgICAgKih1OCAqKXMgPSBwYXR0ZXJuOwotICAgICAgICBy ZXR1cm4gczsKLSAgICBjYXNlIDI6Ci0gICAgICAgICoodTE2ICopcyA9IHBhdHRlcm47Ci0g ICAgICAgIHJldHVybiBzOwotICAgIGNhc2UgMzoKLSAgICAgICAgKih1MTYgKilzID0gcGF0 dGVybjsKLSAgICAgICAgKigyKyh1OCAqKXMpID0gcGF0dGVybjsKLSAgICAgICAgcmV0dXJu IHM7Ci0gICAgY2FzZSA0OgotICAgICAgICAqKHUzMiAqKXMgPSBwYXR0ZXJuOwotICAgICAg ICByZXR1cm4gczsKLSAgICBjYXNlIDU6Ci0gICAgICAgICoodTMyICopcyA9IHBhdHRlcm47 Ci0gICAgICAgICooNCsodTggKilzKSA9IHBhdHRlcm47Ci0gICAgICAgIHJldHVybiBzOwot ICAgIGNhc2UgNjoKLSAgICAgICAgKih1MzIgKilzID0gcGF0dGVybjsKLSAgICAgICAgKigy Kyh1MTYgKilzKSA9IHBhdHRlcm47Ci0gICAgICAgIHJldHVybiBzOwotICAgIGNhc2UgNzoK LSAgICAgICAgKih1MzIgKilzID0gcGF0dGVybjsKLSAgICAgICAgKigyKyh1MTYgKilzKSA9 IHBhdHRlcm47Ci0gICAgICAgICooNisodTggKilzKSA9IHBhdHRlcm47Ci0gICAgICAgIHJl dHVybiBzOwotICAgIGNhc2UgODoKLSAgICAgICAgKih1NjQgKilzID0gcGF0dGVybjsKLSAg ICAgICAgcmV0dXJuIHM7Ci0gICAgfQotI2RlZmluZSBDT01NT04oeCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2FzbV9fICBfX3Zv bGF0aWxlX18gKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICJyZXAgOyBzdG9zIl9fT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgICAgICB4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIDogImEiIChwYXR0 ZXJuKSwgIjAiIChjb3VudC9CWVRFU19QRVJfTE9ORyksICIxIiAocykgICAgXAotICAgICAg ICA6ICJtZW1vcnkiICkKLSAgICB7Ci0gICAgICAgIGxvbmcgZDAsIGQxOwotICAgICAgICBz d2l0Y2ggKCBjb3VudCAlIEJZVEVTX1BFUl9MT05HICkKLSAgICAgICAgewotICAgICAgICBj YXNlIDA6IENPTU1PTigiIik7IHJldHVybiBzOwotICAgICAgICBjYXNlIDE6IENPTU1PTigi XG5cdHN0b3NiIik7IHJldHVybiBzOwotICAgICAgICBjYXNlIDI6IENPTU1PTigiXG5cdHN0 b3N3Iik7IHJldHVybiBzOwotICAgICAgICBjYXNlIDM6IENPTU1PTigiXG5cdHN0b3N3XG5c dHN0b3NiIik7IHJldHVybiBzOwotICAgICAgICBjYXNlIDQ6IENPTU1PTigiXG5cdHN0b3Ns Iik7IHJldHVybiBzOwotICAgICAgICBjYXNlIDU6IENPTU1PTigiXG5cdHN0b3NsXG5cdHN0 b3NiIik7IHJldHVybiBzOwotICAgICAgICBjYXNlIDY6IENPTU1PTigiXG5cdHN0b3NsXG5c dHN0b3N3Iik7IHJldHVybiBzOwotICAgICAgICBjYXNlIDc6IENPTU1PTigiXG5cdHN0b3Ns XG5cdHN0b3N3XG5cdHN0b3NiIik7IHJldHVybiBzOwotICAgICAgICB9Ci0gICAgfQotI3Vu ZGVmIENPTU1PTgotICAgIHJldHVybiBzOwotfQotCi0jZGVmaW5lIF9fY29uc3RhbnRfY194 X21lbXNldChzLCBjLCBjb3VudCkgXAotKF9fYnVpbHRpbl9jb25zdGFudF9wKGNvdW50KSA/ IFwKLSBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgocyksKGMpLChjb3VudCkpIDog XAotIF9fY29uc3RhbnRfY19tZW1zZXQoKHMpLChjKSwoY291bnQpKSkKLQotI2RlZmluZSBf X3Zhcl94X21lbXNldChzLCBjLCBjb3VudCkgXAotKF9fYnVpbHRpbl9jb25zdGFudF9wKGNv dW50KSA/IFwKLSBfX2NvbnN0YW50X2NvdW50X21lbXNldCgocyksKGMpLChjb3VudCkpIDog XAotIF9fbWVtc2V0X2dlbmVyaWMoKHMpLChjKSwoY291bnQpKSkKLQotI2lmZGVmIENPTkZJ R19YODZfNjQKLSNkZWZpbmUgTUVNU0VUX1BBVFRFUk5fTVVMIDB4MDEwMTAxMDEwMTAxMDEw MVVMCi0jZWxzZQotI2RlZmluZSBNRU1TRVRfUEFUVEVSTl9NVUwgMHgwMTAxMDEwMVVMCi0j ZW5kaWYKLQogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKLSNkZWZpbmUgbWVtc2V0KHMs IGMsIGNvdW50KSAoX19tZW1zZXQoKHMpLChjKSwoY291bnQpKSkKLSNkZWZpbmUgX19tZW1z ZXQocywgYywgY291bnQpIFwKLShfX2J1aWx0aW5fY29uc3RhbnRfcChjKSA/IFwKLSBfX2Nv bnN0YW50X2NfeF9tZW1zZXQoKHMpLChNRU1TRVRfUEFUVEVSTl9NVUwqKHVuc2lnbmVkIGNo YXIpKGMpKSwoY291bnQpKSA6IFwKLSBfX3Zhcl94X21lbXNldCgocyksKGMpLChjb3VudCkp KQorI2RlZmluZSBtZW1zZXQocyxjLG4pIChfX2J1aWx0aW5fbWVtc2V0KChzKSwoYyksKG4p KSkKIAogI2VuZGlmIC8qIF9fWDg2X1NUUklOR19IX18gKi8K --B_3356422790_30964906 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --B_3356422790_30964906--