[svn] / ecrypt / trunk / submissions / salsa20 / full / sparc / salsa20.q  

svn: ecrypt/trunk/submissions/salsa20/full/sparc/salsa20.q

File: [svn] / ecrypt / trunk / submissions / salsa20 / full / sparc / salsa20.q (download)
Revision: 182, Fri Jan 5 18:10:12 2007 UTC (6 years, 5 months ago) by cdecanni
File size: 10333 byte(s)
* imported additional implementations.
int64 x
int64 arg2
int64 arg3
int64 arg4

input x
input arg2
input arg3
input arg4

int64 i
int64 a
int64 m
int64 out
int64 bytes
stack64 ctarget
stack512 tmp

stack64 bytes_stack
stack64 out_stack
stack64 m_stack
stack64 x_stack

int64 z0
int64 z1
int64 z2
int64 z3
int64 z4
int64 z5
int64 z6
int64 z7
int64 z8
int64 z9
int64 z10
int64 z11
int64 z12
int64 z13
int64 z14
int64 z15

int64 u0
int64 u1
int64 u2
int64 u3
int64 u4
int64 u5
int64 u6
int64 u7
int64 u8
int64 u9
int64 u10
int64 u11
int64 u12
int64 u13
int64 u14
int64 u15

int64 y0
int64 y1
int64 y2
int64 y3
int64 y4
int64 y5
int64 y6
int64 y7
int64 y8
int64 y9
int64 y10
int64 y11
int64 y12
int64 y13
int64 y14
int64 y15

int64 x0
int64 x1
int64 x2
int64 x3
int64 x4
int64 x5
int64 x6
int64 x7
int64 x8
int64 x9
int64 x10
int64 x11
int64 x12
int64 x13
int64 x14
int64 x15

int64 q0
int64 q1
int64 q2
int64 q3
int64 q4
int64 q5
int64 q6
int64 q7
int64 q8
int64 q9
int64 q10
int64 q11
int64 q12
int64 q13
int64 q14
int64 q15

int64 m0
int64 m1
int64 m2
int64 m3
int64 m4
int64 m5
int64 m6
int64 m7
int64 m8
int64 m9
int64 m10
int64 m11
int64 m12
int64 m13
int64 m14
int64 m15

enter ECRYPT_init
leave


enter ECRYPT_ivsetup
  x6 = *(uint32 *) (arg2 + 0)
  x8 = 0
  x7 = *(uint32 *) (arg2 + 4)
  x9 = 0
  x += 24
  *(swapendian int32 *) x = x6
  x += 4
  *(swapendian int32 *) x = x7
  x += 4
  *(int32 *) (x + 0) = x8
  x += 4
  *(int32 *) (x + 0) = x9
leave


enter ECRYPT_keysetup

                 unsigned>? arg3 - 128
goto kbits256 if unsigned>

kbits128:

  x1 = *(uint32 *) (arg2 + 0)
  x0 = 1634760805 & 0xfffffc00
  x2 = *(uint32 *) (arg2 + 4)
  x5 = 824206446 & 0xfffffc00
  x3 = *(uint32 *) (arg2 + 8)
  x10 = 2036477238 & 0xfffffc00
  x4 = *(uint32 *) (arg2 + 12)
  x15 = 1797285236 & 0xfffffc00
  x11 = *(uint32 *) (arg2 + 0)
  x0 |= 1634760805 & 0x3ff
  x12 = *(uint32 *) (arg2 + 4)
  x5 |= 824206446 & 0x3ff
  x13 = *(uint32 *) (arg2 + 8)
  x10 |= 2036477238 & 0x3ff
  x14 = *(uint32 *) (arg2 + 12)
  x15 |= 1797285236 & 0x3ff

goto storekey

kbits256:

  x1 = *(uint32 *) (arg2 + 0)
  x0 = 1634760805 & 0xfffffc00
  x2 = *(uint32 *) (arg2 + 4)
  x5 = 857760878 & 0xfffffc00
  x3 = *(uint32 *) (arg2 + 8)
  x10 = 2036477234 & 0xfffffc00
  x4 = *(uint32 *) (arg2 + 12)
  x15 = 1797285236 & 0xfffffc00
  x11 = *(uint32 *) (arg2 + 16)
  x0 |= 1634760805 & 0x3ff
  x12 = *(uint32 *) (arg2 + 20)
  x5 |= 857760878 & 0x3ff
  x13 = *(uint32 *) (arg2 + 24)
  x10 |= 2036477234 & 0x3ff
  x14 = *(uint32 *) (arg2 + 28)
  x15 |= 1797285236 & 0x3ff

storekey:

  *(int32 *) (x + 0) = x0
  x += 4
  *(swapendian int32 *) x = x1
  x += 4
  *(swapendian int32 *) x = x2
  x += 4
  *(swapendian int32 *) x = x3
  x += 4
  *(swapendian int32 *) x = x4
  x += 4
  *(int32 *) (x + 0) = x5
  x += 20
  *(int32 *) (x + 0) = x10
  x += 4
  *(swapendian int32 *) x = x11
  x += 4
  *(swapendian int32 *) x = x12
  x += 4
  *(swapendian int32 *) x = x13
  x += 4
  *(swapendian int32 *) x = x14
  x += 4
  *(int32 *) (x + 0) = x15

leave


enter ECRYPT_keystream_bytes

bytes = arg3
m = arg2
out = arg2

              unsigned>? bytes - 0
goto done if !unsigned>

  a = 0
  i = bytes
  zeroloop:
    *(int8 *) (out + 0) = a
    out += 1
                   unsigned>? i -= 1
  goto zeroloop if unsigned>
  out -= bytes

goto bytesatleast1

enter ECRYPT_decrypt_bytes

bytes = arg4
m = arg2
out = arg3

              unsigned>? bytes - 0
goto done if !unsigned>
goto bytesatleast1

enter ECRYPT_encrypt_bytes

bytes = arg4
m = arg2
out = arg3

              unsigned>? bytes - 0
goto done if !unsigned>
bytesatleast1:

                          unsigned<? bytes - 64
  goto bytesatleast64 if !unsigned<

    ctarget = out
    out = &tmp
    i = 0
    mcopyloop:
      a = *(int8 *) (m + i)
      *(int8 *) (out + i) = a
      i += 1
                      unsigned<? i - bytes
    goto mcopyloop if unsigned<
    m = &tmp

  bytesatleast64:

    x0 = *(uint32 *) (x + 0)
    x1 = *(uint32 *) (x + 4)
    x2 = *(uint32 *) (x + 8)
    x3 = *(uint32 *) (x + 12)
    x4 = *(uint32 *) (x + 16)
    x5 = *(uint32 *) (x + 20)
    x6 = *(uint32 *) (x + 24)
    x7 = *(uint32 *) (x + 28)
    x8 = *(uint32 *) (x + 32)
    x9 = *(uint32 *) (x + 36)
    x10 = *(uint32 *) (x + 40)
    x11 = *(uint32 *) (x + 44)
    x12 = *(uint32 *) (x + 48)
    x13 = *(uint32 *) (x + 52)
    x14 = *(uint32 *) (x + 56)
    x15 = *(uint32 *) (x + 60)

    i = 20

    bytes_stack = bytes
    out_stack = out
    m_stack = m
    x_stack = x

    mainloop:



y4 = x0 + x12
		y9 = x5 + x1
z4 = (uint32) y4 << 7
				y14 = x10 + x6
y4 = (uint32) y4 >> 25
						y3 = x15 + x11
		z9 = (uint32) y9 << 7
y4 |= z4
		y9 = (uint32) y9 >> 25
x4 ^= y4
				z14 = (uint32) y14 << 7
		y9 |= z9
				y14 = (uint32) y14 >> 25
y8 = x4 + x0
						z3 = (uint32) y3 << 7
		x9 ^= y9
						y3 = (uint32) y3 >> 25
				y14 |= z14
z8 = (uint32) y8 << 9
		y13 = x9 + x5
y8 = (uint32) y8 >> 23
				x14 ^= y14
						y3 |= z3
				y2 = x14 + x10
		z13 = (uint32) y13 << 9
						x3 ^= y3
		y13 = (uint32) y13 >> 23
y8 |= z8
				z2 = (uint32) y2 << 9
						y7 = x3 + x15
				y2 = (uint32) y2 >> 23
x8 ^= y8
		y13 |= z13
y12 = x8 + x4
						z7 = (uint32) y7 << 9
		x13 ^= y13
						y7 = (uint32) y7 >> 23
				y2 |= z2
z12 = (uint32) y12 << 13
		y1 = x13 + x9
y12 = (uint32) y12 >> 19
				x2 ^= y2
						y7 |= z7
				y6 = x2 + x14
		z1 = (uint32) y1 << 13
						x7 ^= y7
		y1 = (uint32) y1 >> 19
y12 |= z12
				z6 = (uint32) y6 << 13
						y11 = x7 + x3
				y6 = (uint32) y6 >> 19
x12 ^= y12
		y1 |= z1
y0 = x12 + x8
						z11 = (uint32) y11 << 13
		x1 ^= y1
						y11 = (uint32) y11 >> 19
				y6 |= z6
z0 = (uint32) y0 << 18
		y5 = x1 + x13
y0 = (uint32) y0 >> 14
				x6 ^= y6
						y11 |= z11
				y10 = x6 + x2
		z5 = (uint32) y5 << 18
						x11 ^= y11
		y5 = (uint32) y5 >> 14
y0 |= z0
				z10 = (uint32) y10 << 18
						y15 = x11 + x7
				y10 = (uint32) y10 >> 14
x0 ^= y0
		y5 |= z5
u1 = x0 + x3
						z15 = (uint32) y15 << 18
		x5 ^= y5
						y15 = (uint32) y15 >> 14
				y10 |= z10
z1 = (uint32) u1 << 7
		u6 = x5 + x4
u1 = (uint32) u1 >> 25
				x10 ^= y10
						y15 |= z15
				u11 = x10 + x9
		z6 = (uint32) u6 << 7
						x15 ^= y15
		u6 = (uint32) u6 >> 25
u1 |= z1
				z11 = (uint32) u11 << 7
						u12 = x15 + x14
				u11 = (uint32) u11 >> 25
		u6 |= z6
x1 ^= u1
						z12 = (uint32) u12 << 7
		x6 ^= u6
						u12 = (uint32) u12 >> 25
				u11 |= z11
u2 = x1 + x0
		u7 = x6 + x5
z2 = (uint32) u2 << 9
				x11 ^= u11
u2 = (uint32) u2 >> 23
						u12 |= z12
		z7 = (uint32) u7 << 9
				u8 = x11 + x10
		u7 = (uint32) u7 >> 23
						x12 ^= u12
				z8 = (uint32) u8 << 9
u2 |= z2
				u8 = (uint32) u8 >> 23
						u13 = x12 + x15
		u7 |= z7
x2 ^= u2
						z13 = (uint32) u13 << 9
		x7 ^= u7
						u13 = (uint32) u13 >> 23
				u8 |= z8
u3 = x2 + x1
		u4 = x7 + x6
z3 = (uint32) u3 << 13
				x8 ^= u8
		z4 = (uint32) u4 << 13
						u13 |= z13
u3 = (uint32) u3 >> 19
				u9 = x8 + x11
		u4 = (uint32) u4 >> 19
						x13 ^= u13
				z9 = (uint32) u9 << 13
u3 |= z3
				u9 = (uint32) u9 >> 19
						u14 = x13 + x12
		u4 |= z4
x3 ^= u3
						z14 = (uint32) u14 << 13
		x4 ^= u4
						u14 = (uint32) u14 >> 19
				u9 |= z9
u0 = x3 + x2
		u5 = x4 + x7
z0 = (uint32) u0 << 18
				x9 ^= u9
		z5 = (uint32) u5 << 18
						u14 |= z14
u0 = (uint32) u0 >> 14
				u10 = x9 + x8
		u5 = (uint32) u5 >> 14
						x14 ^= u14
				z10 = (uint32) u10 << 18
u0 |= z0
				u10 = (uint32) u10 >> 14
						u15 = x14 + x13
		u5 |= z5
x0 ^= u0
						z15 = (uint32) u15 << 18
		x5 ^= u5
						u15 = (uint32) u15 >> 14
                 unsigned>? i -= 2
				u10 |= z10
						u15 |= z15
				x10 ^= u10
						x15 ^= u15


goto mainloop if unsigned>

  x = x_stack

  q0 = *(uint32 *) (x + 0)
  q1 = *(uint32 *) (x + 4)
  q2 = *(uint32 *) (x + 8)
  q3 = *(uint32 *) (x + 12)
  x0 += q0
  q4 = *(uint32 *) (x + 16)
  x1 += q1
  q5 = *(uint32 *) (x + 20)
  x2 += q2
  q6 = *(uint32 *) (x + 24)
  x3 += q3
  q7 = *(uint32 *) (x + 28)
  x4 += q4
  q8 = *(uint32 *) (x + 32)
  x5 += q5
  q9 = *(uint32 *) (x + 36)
  x6 += q6
  q10 = *(uint32 *) (x + 40)
  x7 += q7
  q11 = *(uint32 *) (x + 44)
  x8 += q8
  q8 += 1
  *(uint32 *) (x + 32) = q8
  q8 = (uint64) q8 >> 32
  q12 = *(uint32 *) (x + 48)
  x9 += q9
  q9 += q8
  *(uint32 *) (x + 36) = q9
  q13 = *(uint32 *) (x + 52)
  x10 += q10
  q14 = *(uint32 *) (x + 56)
  x11 += q11
  q15 = *(uint32 *) (x + 60)
  x12 += q12
  x13 += q13
  x14 += q14
  x15 += q15

  m = m_stack

  m0 = *(swapendian uint32 *) m
  m += 4
  m1 = *(swapendian uint32 *) m
  m += 4
  m2 = *(swapendian uint32 *) m
  m += 4
  m3 = *(swapendian uint32 *) m
  m += 4
  x0 ^= m0
  m4 = *(swapendian uint32 *) m
  m += 4
  x1 ^= m1
  m5 = *(swapendian uint32 *) m
  m += 4
  x2 ^= m2
  m6 = *(swapendian uint32 *) m
  m += 4
  x3 ^= m3
  m7 = *(swapendian uint32 *) m
  m += 4
  x4 ^= m4
  m8 = *(swapendian uint32 *) m
  m += 4
  x5 ^= m5
  m9 = *(swapendian uint32 *) m
  m += 4
  x6 ^= m6
  m10 = *(swapendian uint32 *) m
  m += 4
  x7 ^= m7
  m11 = *(swapendian uint32 *) m
  m += 4
  x8 ^= m8
  m12 = *(swapendian uint32 *) m
  m += 4
  x9 ^= m9
  m13 = *(swapendian uint32 *) m
  m += 4
  x10 ^= m10
  m14 = *(swapendian uint32 *) m
  m += 4
  x11 ^= m11
  m15 = *(swapendian uint32 *) m
  m += 4
  x12 ^= m12
  x13 ^= m13
  x14 ^= m14
  x15 ^= m15

  out = out_stack
  *(swapendian uint32 *) out = x0
  out += 4
  *(swapendian uint32 *) out = x1
  out += 4
  *(swapendian uint32 *) out = x2
  out += 4
  *(swapendian uint32 *) out = x3
  out += 4
  *(swapendian uint32 *) out = x4
  out += 4
  *(swapendian uint32 *) out = x5
  out += 4
  *(swapendian uint32 *) out = x6
  out += 4
  *(swapendian uint32 *) out = x7
  out += 4
  *(swapendian uint32 *) out = x8
  out += 4
  *(swapendian uint32 *) out = x9
  out += 4
  *(swapendian uint32 *) out = x10
  out += 4
  *(swapendian uint32 *) out = x11
  out += 4
  *(swapendian uint32 *) out = x12
  out += 4
  *(swapendian uint32 *) out = x13
  out += 4
  *(swapendian uint32 *) out = x14
  out += 4
  *(swapendian uint32 *) out = x15
  out += 4

  bytes = bytes_stack
                        unsigned>? bytes -= 64
  goto bytesatleast1 if unsigned>
  goto done if !unsigned<

    m = ctarget
    bytes += 64
    out -= 64
    i = 0
    ccopyloop:
      a = *(int8 *) (out + i)
      *(int8 *) (m + i) = a
      i += 1
                      unsigned<? i - bytes
    goto ccopyloop if unsigned<

done:
leave

eSTREAM Project

Powered by ViewCVS 1.0-dev
(Powered by Apache)

ViewCVS and CVS Help