| @@ -0,0 +1,546 @@ |
| 1 | +Changes to support ARM architecture |
| 2 | + |
| 3 | +diff -r 9c9f289188ff Make.unix |
| 4 | +--- a/Make.unix Sun Jan 02 18:33:44 2011 -0500 |
| 5 | ++++ b/Make.unix Tue Feb 22 18:06:58 2011 +0000 |
| 6 | +@@ -19,5 +19,5 @@ |
| 7 | + all: default |
| 8 | + |
| 9 | + libmachdep.a: |
| 10 | +- arch=`uname -m|sed 's/i.86/386/;s/Power Macintosh/power/; s/x86_64/amd64/'`; \ |
| 11 | ++ arch=`uname -m|sed 's/i.86/386/;s/Power Macintosh/power/;s/x86_64/amd64/;s/arm.*/arm/'`; \ |
| 12 | + (cd posix-$$arch && make) |
| 13 | +diff -r 9c9f289188ff posix-arm/Makefile |
| 14 | +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
| 15 | ++++ b/posix-arm/Makefile Tue Feb 22 18:06:58 2011 +0000 |
| 16 | +@@ -0,0 +1,25 @@ |
| 17 | ++ROOT=.. |
| 18 | ++include ../Make.config |
| 19 | ++LIB=../libmachdep.a |
| 20 | ++ |
| 21 | ++OFILES=\ |
| 22 | ++ getcallerpc.$O\ |
| 23 | ++ md5block.$O\ |
| 24 | ++ sha1block.$O\ |
| 25 | ++ tas.$O |
| 26 | ++ |
| 27 | ++default: $(LIB) |
| 28 | ++$(LIB): $(OFILES) |
| 29 | ++ $(AR) r $(LIB) $(OFILES) |
| 30 | ++ $(RANLIB) $(LIB) |
| 31 | ++ |
| 32 | ++%.$O: %.c |
| 33 | ++ $(CC) $(CFLAGS) $*.c |
| 34 | ++ |
| 35 | ++%.$O: %.s |
| 36 | ++ $(AS) -o $*.$O $*.s |
| 37 | ++ |
| 38 | ++%.s: %.spp |
| 39 | ++ cpp $*.spp >$*.s |
| 40 | ++ |
| 41 | ++ |
| 42 | +diff -r 9c9f289188ff posix-arm/getcallerpc.c |
| 43 | +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
| 44 | ++++ b/posix-arm/getcallerpc.c Tue Feb 22 18:06:58 2011 +0000 |
| 45 | +@@ -0,0 +1,8 @@ |
| 46 | ++#include "u.h" |
| 47 | ++#include "libc.h" |
| 48 | ++ |
| 49 | ++uintptr |
| 50 | ++getcallerpc(void *a) |
| 51 | ++{ |
| 52 | ++ return 0; |
| 53 | ++} |
| 54 | +diff -r 9c9f289188ff posix-arm/md5block.c |
| 55 | +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
| 56 | ++++ b/posix-arm/md5block.c Tue Feb 22 18:06:58 2011 +0000 |
| 57 | +@@ -0,0 +1,268 @@ |
| 58 | ++#include <u.h> |
| 59 | ++#include <libc.h> |
| 60 | ++#include <libsec.h> |
| 61 | ++ |
| 62 | ++/* |
| 63 | ++ * rfc1321 requires that I include this. The code is new. The constants |
| 64 | ++ * all come from the rfc (hence the copyright). We trade a table for the |
| 65 | ++ * macros in rfc. The total size is a lot less. -- presotto |
| 66 | ++ * |
| 67 | ++ * Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All |
| 68 | ++ * rights reserved. |
| 69 | ++ * |
| 70 | ++ * License to copy and use this software is granted provided that it |
| 71 | ++ * is identified as the "RSA Data Security, Inc. MD5 Message-Digest |
| 72 | ++ * Algorithm" in all material mentioning or referencing this software |
| 73 | ++ * or this function. |
| 74 | ++ * |
| 75 | ++ * License is also granted to make and use derivative works provided |
| 76 | ++ * that such works are identified as "derived from the RSA Data |
| 77 | ++ * Security, Inc. MD5 Message-Digest Algorithm" in all material |
| 78 | ++ * mentioning or referencing the derived work. |
| 79 | ++ * |
| 80 | ++ * RSA Data Security, Inc. makes no representations concerning either |
| 81 | ++ * the merchantability of this software or the suitability of this |
| 82 | ++ * software forany particular purpose. It is provided "as is" |
| 83 | ++ * without express or implied warranty of any kind. |
| 84 | ++ * These notices must be retained in any copies of any part of this |
| 85 | ++ * documentation and/or software. |
| 86 | ++ */ |
| 87 | ++ |
| 88 | ++/* |
| 89 | ++ * Rotate ammounts used in the algorithm |
| 90 | ++ */ |
| 91 | ++enum |
| 92 | ++{ |
| 93 | ++ S11= 7, |
| 94 | ++ S12= 12, |
| 95 | ++ S13= 17, |
| 96 | ++ S14= 22, |
| 97 | ++ |
| 98 | ++ S21= 5, |
| 99 | ++ S22= 9, |
| 100 | ++ S23= 14, |
| 101 | ++ S24= 20, |
| 102 | ++ |
| 103 | ++ S31= 4, |
| 104 | ++ S32= 11, |
| 105 | ++ S33= 16, |
| 106 | ++ S34= 23, |
| 107 | ++ |
| 108 | ++ S41= 6, |
| 109 | ++ S42= 10, |
| 110 | ++ S43= 15, |
| 111 | ++ S44= 21, |
| 112 | ++}; |
| 113 | ++ |
| 114 | ++static u32int md5tab[] = |
| 115 | ++{ |
| 116 | ++ /* round 1 */ |
| 117 | ++/*[0]*/ 0xd76aa478, |
| 118 | ++ 0xe8c7b756, |
| 119 | ++ 0x242070db, |
| 120 | ++ 0xc1bdceee, |
| 121 | ++ 0xf57c0faf, |
| 122 | ++ 0x4787c62a, |
| 123 | ++ 0xa8304613, |
| 124 | ++ 0xfd469501, |
| 125 | ++ 0x698098d8, |
| 126 | ++ 0x8b44f7af, |
| 127 | ++ 0xffff5bb1, |
| 128 | ++ 0x895cd7be, |
| 129 | ++ 0x6b901122, |
| 130 | ++ 0xfd987193, |
| 131 | ++ 0xa679438e, |
| 132 | ++ 0x49b40821, |
| 133 | ++ |
| 134 | ++ /* round 2 */ |
| 135 | ++/*[16]*/0xf61e2562, |
| 136 | ++ 0xc040b340, |
| 137 | ++ 0x265e5a51, |
| 138 | ++ 0xe9b6c7aa, |
| 139 | ++ 0xd62f105d, |
| 140 | ++ 0x2441453, |
| 141 | ++ 0xd8a1e681, |
| 142 | ++ 0xe7d3fbc8, |
| 143 | ++ 0x21e1cde6, |
| 144 | ++ 0xc33707d6, |
| 145 | ++ 0xf4d50d87, |
| 146 | ++ 0x455a14ed, |
| 147 | ++ 0xa9e3e905, |
| 148 | ++ 0xfcefa3f8, |
| 149 | ++ 0x676f02d9, |
| 150 | ++ 0x8d2a4c8a, |
| 151 | ++ |
| 152 | ++ /* round 3 */ |
| 153 | ++/*[32]*/0xfffa3942, |
| 154 | ++ 0x8771f681, |
| 155 | ++ 0x6d9d6122, |
| 156 | ++ 0xfde5380c, |
| 157 | ++ 0xa4beea44, |
| 158 | ++ 0x4bdecfa9, |
| 159 | ++ 0xf6bb4b60, |
| 160 | ++ 0xbebfbc70, |
| 161 | ++ 0x289b7ec6, |
| 162 | ++ 0xeaa127fa, |
| 163 | ++ 0xd4ef3085, |
| 164 | ++ 0x4881d05, |
| 165 | ++ 0xd9d4d039, |
| 166 | ++ 0xe6db99e5, |
| 167 | ++ 0x1fa27cf8, |
| 168 | ++ 0xc4ac5665, |
| 169 | ++ |
| 170 | ++ /* round 4 */ |
| 171 | ++/*[48]*/0xf4292244, |
| 172 | ++ 0x432aff97, |
| 173 | ++ 0xab9423a7, |
| 174 | ++ 0xfc93a039, |
| 175 | ++ 0x655b59c3, |
| 176 | ++ 0x8f0ccc92, |
| 177 | ++ 0xffeff47d, |
| 178 | ++ 0x85845dd1, |
| 179 | ++ 0x6fa87e4f, |
| 180 | ++ 0xfe2ce6e0, |
| 181 | ++ 0xa3014314, |
| 182 | ++ 0x4e0811a1, |
| 183 | ++ 0xf7537e82, |
| 184 | ++ 0xbd3af235, |
| 185 | ++ 0x2ad7d2bb, |
| 186 | ++ 0xeb86d391, |
| 187 | ++}; |
| 188 | ++ |
| 189 | ++static void decode(u32int*, uchar*, ulong); |
| 190 | ++extern void _md5block(uchar *p, ulong len, u32int *s); |
| 191 | ++ |
| 192 | ++void |
| 193 | ++_md5block(uchar *p, ulong len, u32int *s) |
| 194 | ++{ |
| 195 | ++ u32int a, b, c, d, sh; |
| 196 | ++ u32int *t; |
| 197 | ++ uchar *end; |
| 198 | ++ u32int x[16]; |
| 199 | ++ |
| 200 | ++ for(end = p+len; p < end; p += 64){ |
| 201 | ++ a = s[0]; |
| 202 | ++ b = s[1]; |
| 203 | ++ c = s[2]; |
| 204 | ++ d = s[3]; |
| 205 | ++ |
| 206 | ++ decode(x, p, 64); |
| 207 | ++ |
| 208 | ++ t = md5tab; |
| 209 | ++ sh = 0; |
| 210 | ++ for(; sh != 16; t += 4){ |
| 211 | ++ a += ((c ^ d) & b) ^ d; |
| 212 | ++ a += x[sh] + t[0]; |
| 213 | ++ a = (a << S11) | (a >> (32 - S11)); |
| 214 | ++ a += b; |
| 215 | ++ |
| 216 | ++ d += ((b ^ c) & a) ^ c; |
| 217 | ++ d += x[sh + 1] + t[1]; |
| 218 | ++ d = (d << S12) | (d >> (32 - S12)); |
| 219 | ++ d += a; |
| 220 | ++ |
| 221 | ++ c += ((a ^ b) & d) ^ b; |
| 222 | ++ c += x[sh + 2] + t[2]; |
| 223 | ++ c = (c << S13) | (c >> (32 - S13)); |
| 224 | ++ c += d; |
| 225 | ++ |
| 226 | ++ b += ((d ^ a) & c) ^ a; |
| 227 | ++ b += x[sh + 3] + t[3]; |
| 228 | ++ b = (b << S14) | (b >> (32 - S14)); |
| 229 | ++ b += c; |
| 230 | ++ |
| 231 | ++ sh += 4; |
| 232 | ++ } |
| 233 | ++ sh = 1; |
| 234 | ++ for(; sh != 1+20*4; t += 4){ |
| 235 | ++ a += ((b ^ c) & d) ^ c; |
| 236 | ++ a += x[sh & 0xf] + t[0]; |
| 237 | ++ a = (a << S21) | (a >> (32 - S21)); |
| 238 | ++ a += b; |
| 239 | ++ |
| 240 | ++ d += ((a ^ b) & c) ^ b; |
| 241 | ++ d += x[(sh + 5) & 0xf] + t[1]; |
| 242 | ++ d = (d << S22) | (d >> (32 - S22)); |
| 243 | ++ d += a; |
| 244 | ++ |
| 245 | ++ c += ((d ^ a) & b) ^ a; |
| 246 | ++ c += x[(sh + 10) & 0xf] + t[2]; |
| 247 | ++ c = (c << S23) | (c >> (32 - S23)); |
| 248 | ++ c += d; |
| 249 | ++ |
| 250 | ++ b += ((c ^ d) & a) ^ d; |
| 251 | ++ b += x[(sh + 15) & 0xf] + t[3]; |
| 252 | ++ b = (b << S24) | (b >> (32 - S24)); |
| 253 | ++ b += c; |
| 254 | ++ |
| 255 | ++ sh += 20; |
| 256 | ++ } |
| 257 | ++ sh = 5; |
| 258 | ++ for(; sh != 5+12*4; t += 4){ |
| 259 | ++ a += b ^ c ^ d; |
| 260 | ++ a += x[sh & 0xf] + t[0]; |
| 261 | ++ a = (a << S31) | (a >> (32 - S31)); |
| 262 | ++ a += b; |
| 263 | ++ |
| 264 | ++ d += a ^ b ^ c; |
| 265 | ++ d += x[(sh + 3) & 0xf] + t[1]; |
| 266 | ++ d = (d << S32) | (d >> (32 - S32)); |
| 267 | ++ d += a; |
| 268 | ++ |
| 269 | ++ c += d ^ a ^ b; |
| 270 | ++ c += x[(sh + 6) & 0xf] + t[2]; |
| 271 | ++ c = (c << S33) | (c >> (32 - S33)); |
| 272 | ++ c += d; |
| 273 | ++ |
| 274 | ++ b += c ^ d ^ a; |
| 275 | ++ b += x[(sh + 9) & 0xf] + t[3]; |
| 276 | ++ b = (b << S34) | (b >> (32 - S34)); |
| 277 | ++ b += c; |
| 278 | ++ |
| 279 | ++ sh += 12; |
| 280 | ++ } |
| 281 | ++ sh = 0; |
| 282 | ++ for(; sh != 28*4; t += 4){ |
| 283 | ++ a += c ^ (b | ~d); |
| 284 | ++ a += x[sh & 0xf] + t[0]; |
| 285 | ++ a = (a << S41) | (a >> (32 - S41)); |
| 286 | ++ a += b; |
| 287 | ++ |
| 288 | ++ d += b ^ (a | ~c); |
| 289 | ++ d += x[(sh + 7) & 0xf] + t[1]; |
| 290 | ++ d = (d << S42) | (d >> (32 - S42)); |
| 291 | ++ d += a; |
| 292 | ++ |
| 293 | ++ c += a ^ (d | ~b); |
| 294 | ++ c += x[(sh + 14) & 0xf] + t[2]; |
| 295 | ++ c = (c << S43) | (c >> (32 - S43)); |
| 296 | ++ c += d; |
| 297 | ++ |
| 298 | ++ b += d ^ (c | ~a); |
| 299 | ++ b += x[(sh + 21) & 0xf] + t[3]; |
| 300 | ++ b = (b << S44) | (b >> (32 - S44)); |
| 301 | ++ b += c; |
| 302 | ++ |
| 303 | ++ sh += 28; |
| 304 | ++ } |
| 305 | ++ |
| 306 | ++ s[0] += a; |
| 307 | ++ s[1] += b; |
| 308 | ++ s[2] += c; |
| 309 | ++ s[3] += d; |
| 310 | ++ } |
| 311 | ++} |
| 312 | ++ |
| 313 | ++/* |
| 314 | ++ * decodes input (uchar) into output (u32int). Assumes len is |
| 315 | ++ * a multiple of 4. |
| 316 | ++ */ |
| 317 | ++static void |
| 318 | ++decode(u32int *output, uchar *input, ulong len) |
| 319 | ++{ |
| 320 | ++ uchar *e; |
| 321 | ++ |
| 322 | ++ for(e = input+len; input < e; input += 4) |
| 323 | ++ *output++ = input[0] | (input[1] << 8) | |
| 324 | ++ (input[2] << 16) | (input[3] << 24); |
| 325 | ++} |
| 326 | +diff -r 9c9f289188ff posix-arm/sha1block.c |
| 327 | +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
| 328 | ++++ b/posix-arm/sha1block.c Tue Feb 22 18:06:58 2011 +0000 |
| 329 | +@@ -0,0 +1,189 @@ |
| 330 | ++#include <u.h> |
| 331 | ++#include <libc.h> |
| 332 | ++#include <libsec.h> |
| 333 | ++ |
| 334 | ++void |
| 335 | ++_sha1block(uchar *p, ulong len, u32int *s) |
| 336 | ++{ |
| 337 | ++ u32int a, b, c, d, e, x; |
| 338 | ++ uchar *end; |
| 339 | ++ u32int *wp, *wend; |
| 340 | ++ u32int w[80]; |
| 341 | ++ |
| 342 | ++ /* at this point, we have a multiple of 64 bytes */ |
| 343 | ++ for(end = p+len; p < end;){ |
| 344 | ++ a = s[0]; |
| 345 | ++ b = s[1]; |
| 346 | ++ c = s[2]; |
| 347 | ++ d = s[3]; |
| 348 | ++ e = s[4]; |
| 349 | ++ |
| 350 | ++ wend = w + 15; |
| 351 | ++ for(wp = w; wp < wend; wp += 5){ |
| 352 | ++ wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]; |
| 353 | ++ e += ((a<<5) | (a>>27)) + wp[0]; |
| 354 | ++ e += 0x5a827999 + (((c^d)&b)^d); |
| 355 | ++ b = (b<<30)|(b>>2); |
| 356 | ++ |
| 357 | ++ wp[1] = (p[4]<<24) | (p[5]<<16) | (p[6]<<8) | p[7]; |
| 358 | ++ d += ((e<<5) | (e>>27)) + wp[1]; |
| 359 | ++ d += 0x5a827999 + (((b^c)&a)^c); |
| 360 | ++ a = (a<<30)|(a>>2); |
| 361 | ++ |
| 362 | ++ wp[2] = (p[8]<<24) | (p[9]<<16) | (p[10]<<8) | p[11]; |
| 363 | ++ c += ((d<<5) | (d>>27)) + wp[2]; |
| 364 | ++ c += 0x5a827999 + (((a^b)&e)^b); |
| 365 | ++ e = (e<<30)|(e>>2); |
| 366 | ++ |
| 367 | ++ wp[3] = (p[12]<<24) | (p[13]<<16) | (p[14]<<8) | p[15]; |
| 368 | ++ b += ((c<<5) | (c>>27)) + wp[3]; |
| 369 | ++ b += 0x5a827999 + (((e^a)&d)^a); |
| 370 | ++ d = (d<<30)|(d>>2); |
| 371 | ++ |
| 372 | ++ wp[4] = (p[16]<<24) | (p[17]<<16) | (p[18]<<8) | p[19]; |
| 373 | ++ a += ((b<<5) | (b>>27)) + wp[4]; |
| 374 | ++ a += 0x5a827999 + (((d^e)&c)^e); |
| 375 | ++ c = (c<<30)|(c>>2); |
| 376 | ++ |
| 377 | ++ p += 20; |
| 378 | ++ } |
| 379 | ++ |
| 380 | ++ wp[0] = (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3]; |
| 381 | ++ e += ((a<<5) | (a>>27)) + wp[0]; |
| 382 | ++ e += 0x5a827999 + (((c^d)&b)^d); |
| 383 | ++ b = (b<<30)|(b>>2); |
| 384 | ++ |
| 385 | ++ x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15]; |
| 386 | ++ wp[1] = (x<<1) | (x>>31); |
| 387 | ++ d += ((e<<5) | (e>>27)) + wp[1]; |
| 388 | ++ d += 0x5a827999 + (((b^c)&a)^c); |
| 389 | ++ a = (a<<30)|(a>>2); |
| 390 | ++ |
| 391 | ++ x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14]; |
| 392 | ++ wp[2] = (x<<1) | (x>>31); |
| 393 | ++ c += ((d<<5) | (d>>27)) + wp[2]; |
| 394 | ++ c += 0x5a827999 + (((a^b)&e)^b); |
| 395 | ++ e = (e<<30)|(e>>2); |
| 396 | ++ |
| 397 | ++ x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13]; |
| 398 | ++ wp[3] = (x<<1) | (x>>31); |
| 399 | ++ b += ((c<<5) | (c>>27)) + wp[3]; |
| 400 | ++ b += 0x5a827999 + (((e^a)&d)^a); |
| 401 | ++ d = (d<<30)|(d>>2); |
| 402 | ++ |
| 403 | ++ x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12]; |
| 404 | ++ wp[4] = (x<<1) | (x>>31); |
| 405 | ++ a += ((b<<5) | (b>>27)) + wp[4]; |
| 406 | ++ a += 0x5a827999 + (((d^e)&c)^e); |
| 407 | ++ c = (c<<30)|(c>>2); |
| 408 | ++ |
| 409 | ++ wp += 5; |
| 410 | ++ p += 4; |
| 411 | ++ |
| 412 | ++ wend = w + 40; |
| 413 | ++ for(; wp < wend; wp += 5){ |
| 414 | ++ x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16]; |
| 415 | ++ wp[0] = (x<<1) | (x>>31); |
| 416 | ++ e += ((a<<5) | (a>>27)) + wp[0]; |
| 417 | ++ e += 0x6ed9eba1 + (b^c^d); |
| 418 | ++ b = (b<<30)|(b>>2); |
| 419 | ++ |
| 420 | ++ x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15]; |
| 421 | ++ wp[1] = (x<<1) | (x>>31); |
| 422 | ++ d += ((e<<5) | (e>>27)) + wp[1]; |
| 423 | ++ d += 0x6ed9eba1 + (a^b^c); |
| 424 | ++ a = (a<<30)|(a>>2); |
| 425 | ++ |
| 426 | ++ x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14]; |
| 427 | ++ wp[2] = (x<<1) | (x>>31); |
| 428 | ++ c += ((d<<5) | (d>>27)) + wp[2]; |
| 429 | ++ c += 0x6ed9eba1 + (e^a^b); |
| 430 | ++ e = (e<<30)|(e>>2); |
| 431 | ++ |
| 432 | ++ x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13]; |
| 433 | ++ wp[3] = (x<<1) | (x>>31); |
| 434 | ++ b += ((c<<5) | (c>>27)) + wp[3]; |
| 435 | ++ b += 0x6ed9eba1 + (d^e^a); |
| 436 | ++ d = (d<<30)|(d>>2); |
| 437 | ++ |
| 438 | ++ x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12]; |
| 439 | ++ wp[4] = (x<<1) | (x>>31); |
| 440 | ++ a += ((b<<5) | (b>>27)) + wp[4]; |
| 441 | ++ a += 0x6ed9eba1 + (c^d^e); |
| 442 | ++ c = (c<<30)|(c>>2); |
| 443 | ++ } |
| 444 | ++ |
| 445 | ++ wend = w + 60; |
| 446 | ++ for(; wp < wend; wp += 5){ |
| 447 | ++ x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16]; |
| 448 | ++ wp[0] = (x<<1) | (x>>31); |
| 449 | ++ e += ((a<<5) | (a>>27)) + wp[0]; |
| 450 | ++ e += 0x8f1bbcdc + ((b&c)|((b|c)&d)); |
| 451 | ++ b = (b<<30)|(b>>2); |
| 452 | ++ |
| 453 | ++ x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15]; |
| 454 | ++ wp[1] = (x<<1) | (x>>31); |
| 455 | ++ d += ((e<<5) | (e>>27)) + wp[1]; |
| 456 | ++ d += 0x8f1bbcdc + ((a&b)|((a|b)&c)); |
| 457 | ++ a = (a<<30)|(a>>2); |
| 458 | ++ |
| 459 | ++ x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14]; |
| 460 | ++ wp[2] = (x<<1) | (x>>31); |
| 461 | ++ c += ((d<<5) | (d>>27)) + wp[2]; |
| 462 | ++ c += 0x8f1bbcdc + ((e&a)|((e|a)&b)); |
| 463 | ++ e = (e<<30)|(e>>2); |
| 464 | ++ |
| 465 | ++ x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13]; |
| 466 | ++ wp[3] = (x<<1) | (x>>31); |
| 467 | ++ b += ((c<<5) | (c>>27)) + wp[3]; |
| 468 | ++ b += 0x8f1bbcdc + ((d&e)|((d|e)&a)); |
| 469 | ++ d = (d<<30)|(d>>2); |
| 470 | ++ |
| 471 | ++ x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12]; |
| 472 | ++ wp[4] = (x<<1) | (x>>31); |
| 473 | ++ a += ((b<<5) | (b>>27)) + wp[4]; |
| 474 | ++ a += 0x8f1bbcdc + ((c&d)|((c|d)&e)); |
| 475 | ++ c = (c<<30)|(c>>2); |
| 476 | ++ } |
| 477 | ++ |
| 478 | ++ wend = w + 80; |
| 479 | ++ for(; wp < wend; wp += 5){ |
| 480 | ++ x = wp[-3] ^ wp[-8] ^ wp[-14] ^ wp[-16]; |
| 481 | ++ wp[0] = (x<<1) | (x>>31); |
| 482 | ++ e += ((a<<5) | (a>>27)) + wp[0]; |
| 483 | ++ e += 0xca62c1d6 + (b^c^d); |
| 484 | ++ b = (b<<30)|(b>>2); |
| 485 | ++ |
| 486 | ++ x = wp[-2] ^ wp[-7] ^ wp[-13] ^ wp[-15]; |
| 487 | ++ wp[1] = (x<<1) | (x>>31); |
| 488 | ++ d += ((e<<5) | (e>>27)) + wp[1]; |
| 489 | ++ d += 0xca62c1d6 + (a^b^c); |
| 490 | ++ a = (a<<30)|(a>>2); |
| 491 | ++ |
| 492 | ++ x = wp[-1] ^ wp[-6] ^ wp[-12] ^ wp[-14]; |
| 493 | ++ wp[2] = (x<<1) | (x>>31); |
| 494 | ++ c += ((d<<5) | (d>>27)) + wp[2]; |
| 495 | ++ c += 0xca62c1d6 + (e^a^b); |
| 496 | ++ e = (e<<30)|(e>>2); |
| 497 | ++ |
| 498 | ++ x = wp[0] ^ wp[-5] ^ wp[-11] ^ wp[-13]; |
| 499 | ++ wp[3] = (x<<1) | (x>>31); |
| 500 | ++ b += ((c<<5) | (c>>27)) + wp[3]; |
| 501 | ++ b += 0xca62c1d6 + (d^e^a); |
| 502 | ++ d = (d<<30)|(d>>2); |
| 503 | ++ |
| 504 | ++ x = wp[1] ^ wp[-4] ^ wp[-10] ^ wp[-12]; |
| 505 | ++ wp[4] = (x<<1) | (x>>31); |
| 506 | ++ a += ((b<<5) | (b>>27)) + wp[4]; |
| 507 | ++ a += 0xca62c1d6 + (c^d^e); |
| 508 | ++ c = (c<<30)|(c>>2); |
| 509 | ++ } |
| 510 | ++ |
| 511 | ++ /* save state */ |
| 512 | ++ s[0] += a; |
| 513 | ++ s[1] += b; |
| 514 | ++ s[2] += c; |
| 515 | ++ s[3] += d; |
| 516 | ++ s[4] += e; |
| 517 | ++ } |
| 518 | ++} |
| 519 | +diff -r 9c9f289188ff posix-arm/tas.c |
| 520 | +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 |
| 521 | ++++ b/posix-arm/tas.c Tue Feb 22 18:06:58 2011 +0000 |
| 522 | +@@ -0,0 +1,24 @@ |
| 523 | ++#include "u.h" |
| 524 | ++#include "libc.h" |
| 525 | ++ |
| 526 | ++int |
| 527 | ++tas(long *x) |
| 528 | ++{ |
| 529 | ++ int v; |
| 530 | ++ |
| 531 | ++ __asm__( |
| 532 | ++ "swp %0, %1, [%2]" |
| 533 | ++ : "=&r" (v) |
| 534 | ++ : "r" (1), "r" (x) |
| 535 | ++ : "memory" |
| 536 | ++ ); |
| 537 | ++ switch(v) { |
| 538 | ++ case 0: |
| 539 | ++ case 1: |
| 540 | ++ return v; |
| 541 | ++ default: |
| 542 | ++ print("canlock: corrupted 0x%lux\n", v); |
| 543 | ++ return 1; |
| 544 | ++ } |
| 545 | ++} |
| 546 | ++ |