1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#!/usr/local/bin/perl
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# The inner loop instruction sequence and the IP/FP modifications are from
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# Svend Olaf Mikkelsen <svolaf@inet.uni-c.dk>
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# I've added the stuff needed for crypt() but I've not worried about making
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# things perfect.
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrompush(@INC,"${dir}","${dir}../../perlasm");
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectrequire "x86asm.pl";
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project&asm_init($ARGV[0],"crypt586.pl");
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$L="edi";
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$R="esi";
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project&external_label("DES_SPtrans");
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project&fcrypt_body("fcrypt_body");
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project&asm_finish();
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub fcrypt_body
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	local($name,$do_ip)=@_;
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
26221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom	&function_begin($name);
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("");
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("Load the 2 words");
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	$trans="ebp";
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,	$L);
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$R,	$R);
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	# PIC-ification:-)
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&picmeup("edx","DES_SPtrans");
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	#if ($cpp)	{ &picmeup("edx","DES_SPtrans");   }
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	#else		{ &lea("edx",&DWP("DES_SPtrans")); }
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&push("edx");	# becomes &swtmp(1)
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	#
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov($trans,&wparam(1)); # reloaded with DES_SPtrans in D_ENCRYPT
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&push(&DWC(25)); # add a variable
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&set_label("start");
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	for ($i=0; $i<16; $i+=2)
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&comment("");
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&comment("Round $i");
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&D_ENCRYPT($i,$L,$R,$i*2,$trans,"eax","ebx","ecx","edx");
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&comment("");
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&comment("Round ".sprintf("%d",$i+1));
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&D_ENCRYPT($i+1,$R,$L,($i+1)*2,$trans,"eax","ebx","ecx","edx");
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 &mov("ebx",	&swtmp(0));
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov("eax",	$L);
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 &dec("ebx");
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov($L,	$R);
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 &mov($R,	"eax");
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(0),	"ebx");
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	 &jnz(&label("start"));
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("");
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("FP");
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov("edx",&wparam(0));
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&FP_new($R,$L,"eax",3);
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&DWP(0,"edx","",0),"eax");
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&DWP(4,"edx","",0),$L);
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&add("esp",8);	# remove variables
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&function_end($name);
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub D_ENCRYPT
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	local($r,$L,$R,$S,$trans,$u,$tmp1,$tmp2,$t)=@_;
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$u,		&wparam(2));			# 2
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$t,		$R);
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&shr(	$t,		16);				# 1
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp2,		&wparam(3));			# 2
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$t,		$R);				# 1
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&and(	$u,		$t);				# 2
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&and(	$t,		$tmp2);				# 2
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp1,		$u);
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&shl(	$tmp1,		16); 				# 1
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp2,		$t);
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&shl(	$tmp2,		16); 				# 1
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$u,		$tmp1);				# 2
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$t,		$tmp2);				# 2
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp1,		&DWP(&n2a($S*4),$trans,"",0));	# 2
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$u,		$tmp1);
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp2,		&DWP(&n2a(($S+1)*4),$trans,"",0));	# 2
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$u,		$R);
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$t,		$R);
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$t,		$tmp2);
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&and(	$u,		"0xfcfcfcfc"	);		# 2
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$tmp1,		$tmp1);				# 1
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&and(	$t,		"0xcfcfcfcf"	);		# 2
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$tmp2,		$tmp2);
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&movb(	&LB($tmp1),	&LB($u)	);
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&movb(	&LB($tmp2),	&HB($u)	);
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&rotr(	$t,		4		);
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$trans,		&swtmp(1));
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		&DWP("     ",$trans,$tmp1,0));
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&movb(	&LB($tmp1),	&LB($t)	);
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		&DWP("0x200",$trans,$tmp2,0));
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&movb(	&LB($tmp2),	&HB($t)	);
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&shr(	$u,		16);
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		&DWP("0x100",$trans,$tmp1,0));
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&movb(	&LB($tmp1),	&HB($u)	);
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&shr(	$t,		16);
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		&DWP("0x300",$trans,$tmp2,0));
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&movb(	&LB($tmp2),	&HB($t)	);
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&and(	$u,		"0xff"	);
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&and(	$t,		"0xff"	);
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp1,		&DWP("0x600",$trans,$tmp1,0));
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		$tmp1);
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp1,		&DWP("0x700",$trans,$tmp2,0));
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		$tmp1);
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp1,		&DWP("0x400",$trans,$u,0));
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		$tmp1);
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tmp1,		&DWP("0x500",$trans,$t,0));
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$L,		$tmp1);
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$trans,		&wparam(1));
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub n2a
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	sprintf("%d",$_[0]);
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# now has a side affect of rotating $a by $shift
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub R_PERM_OP
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	local($a,$b,$tt,$shift,$mask,$last)=@_;
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&rotl(	$a,		$shift		) if ($shift != 0);
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(	$tt,		$a		);
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&xor(	$a,		$b		);
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&and(	$a,		$mask		);
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ($notlast eq $b)
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&xor(	$b,		$a		);
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&xor(	$tt,		$a		);
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	else
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&xor(	$tt,		$a		);
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&xor(	$b,		$a		);
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("");
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub IP_new
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	local($l,$r,$tt,$lr)=@_;
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($l,$r,$tt, 4,"0xf0f0f0f0",$l);
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($r,$tt,$l,20,"0xfff0000f",$l);
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($l,$tt,$r,14,"0x33333333",$r);
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($tt,$r,$l,22,"0x03fc03fc",$r);
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($l,$r,$tt, 9,"0xaaaaaaaa",$r);
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ($lr != 3)
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (($lr-3) < 0)
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			{ &rotr($tt,	3-$lr); }
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		else	{ &rotl($tt,	$lr-3); }
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ($lr != 2)
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (($lr-2) < 0)
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			{ &rotr($r,	2-$lr); }
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		else	{ &rotl($r,	$lr-2); }
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub FP_new
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	local($l,$r,$tt,$lr)=@_;
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ($lr != 2)
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (($lr-2) < 0)
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			{ &rotl($r,	2-$lr); }
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		else	{ &rotr($r,	$lr-2); }
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ($lr != 3)
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		if (($lr-3) < 0)
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project			{ &rotl($l,	3-$lr); }
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		else	{ &rotr($l,	$lr-3); }
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($l,$r,$tt, 0,"0xaaaaaaaa",$r);
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($tt,$r,$l,23,"0x03fc03fc",$r);
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($l,$r,$tt,10,"0x33333333",$l);
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($r,$tt,$l,18,"0xfff0000f",$l);
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&R_PERM_OP($l,$tt,$r,12,"0xf0f0f0f0",$r);
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&rotr($tt	, 4);
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
210