1c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#!/usr/local/bin/perl 2c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 3c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org$L="edi"; 4c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org$R="esi"; 5c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 6c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgsub DES_encrypt3 7c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 8c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org local($name,$enc)=@_; 9c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 10c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &function_begin_B($name,""); 11c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &push("ebx"); 12c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov("ebx",&wparam(0)); 13c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 14c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &push("ebp"); 15c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &push("esi"); 16c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 17c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &push("edi"); 18c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 19c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &comment(""); 20c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &comment("Load the data words"); 21c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov($L,&DWP(0,"ebx","",0)); 22c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov($R,&DWP(4,"ebx","",0)); 23c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &stack_push(3); 24c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 25c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &comment(""); 26c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &comment("IP"); 27c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &IP_new($L,$R,"edx",0); 28c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 29c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org # put them back 30c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 31c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if ($enc) 32c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 33c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&DWP(4,"ebx","",0),$R); 34c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov("eax",&wparam(1)); 35c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&DWP(0,"ebx","",0),"edx"); 36c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov("edi",&wparam(2)); 37c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov("esi",&wparam(3)); 38c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 39c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org else 40c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 41c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&DWP(4,"ebx","",0),$R); 42c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov("esi",&wparam(1)); 43c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&DWP(0,"ebx","",0),"edx"); 44c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov("edi",&wparam(2)); 45c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov("eax",&wparam(3)); 46c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 47c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(2), (DWC(($enc)?"1":"0"))); 48c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(1), "eax"); 49c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(0), "ebx"); 50c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &call("DES_encrypt2"); 51c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(2), (DWC(($enc)?"0":"1"))); 52c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(1), "edi"); 53c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(0), "ebx"); 54c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &call("DES_encrypt2"); 55c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(2), (DWC(($enc)?"1":"0"))); 56c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(1), "esi"); 57c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&swtmp(0), "ebx"); 58c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &call("DES_encrypt2"); 59c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 60c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &stack_pop(3); 61c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov($L,&DWP(0,"ebx","",0)); 62c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov($R,&DWP(4,"ebx","",0)); 63c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 64c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &comment(""); 65c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &comment("FP"); 66c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &FP_new($L,$R,"eax",0); 67c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 68c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&DWP(0,"ebx","",0),"eax"); 69c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &mov(&DWP(4,"ebx","",0),$R); 70c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 71c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &pop("edi"); 72c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &pop("esi"); 73c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &pop("ebp"); 74c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &pop("ebx"); 75c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &ret(); 76c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org &function_end_B($name); 77c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 78c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 79c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 80