1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#!/usr/local/bin/perl
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$L="edi";
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$R="esi";
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub DES_encrypt3
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	{
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	local($name,$enc)=@_;
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&function_begin_B($name,"");
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&push("ebx");
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov("ebx",&wparam(0));
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&push("ebp");
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&push("esi");
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&push("edi");
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("");
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("Load the data words");
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov($L,&DWP(0,"ebx","",0));
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov($R,&DWP(4,"ebx","",0));
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&stack_push(3);
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("");
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("IP");
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&IP_new($L,$R,"edx",0);
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	# put them back
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	if ($enc)
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&mov(&DWP(4,"ebx","",0),$R);
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 &mov("eax",&wparam(1));
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&mov(&DWP(0,"ebx","",0),"edx");
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 &mov("edi",&wparam(2));
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 &mov("esi",&wparam(3));
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	else
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		{
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&mov(&DWP(4,"ebx","",0),$R);
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 &mov("esi",&wparam(1));
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		&mov(&DWP(0,"ebx","",0),"edx");
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 &mov("edi",&wparam(2));
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		 &mov("eax",&wparam(3));
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project		}
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(2),	(DWC(($enc)?"1":"0")));
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(1),	"eax");
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(0),	"ebx");
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&call("DES_encrypt2");
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(2),	(DWC(($enc)?"0":"1")));
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(1),	"edi");
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(0),	"ebx");
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&call("DES_encrypt2");
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(2),	(DWC(($enc)?"1":"0")));
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(1),	"esi");
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&swtmp(0),	"ebx");
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&call("DES_encrypt2");
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&stack_pop(3);
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov($L,&DWP(0,"ebx","",0));
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov($R,&DWP(4,"ebx","",0));
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("");
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&comment("FP");
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&FP_new($L,$R,"eax",0);
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&DWP(0,"ebx","",0),"eax");
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&mov(&DWP(4,"ebx","",0),$R);
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&pop("edi");
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&pop("esi");
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&pop("ebp");
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&pop("ebx");
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&ret();
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	&function_end_B($name);
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	}
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
80