1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#!/usr/local/bin/perl 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# x86 assember 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectsub bn_sqr_words 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project local($name)=@_; 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &function_begin($name,""); 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &comment(""); 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project $r="esi"; 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project $a="edi"; 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project $num="ebx"; 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov($r,&wparam(0)); # 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov($a,&wparam(1)); # 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov($num,&wparam(2)); # 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &and($num,0xfffffff8); # num / 8 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &jz(&label("sw_finish")); 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &set_label("sw_loop",0); 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for ($i=0; $i<32; $i+=4) 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &comment("Round $i"); 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov("eax",&DWP($i,$a,"",0)); # *a 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project # XXX 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mul("eax"); # *a * *a 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov(&DWP($i*2,$r,"",0),"eax"); # 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov(&DWP($i*2+4,$r,"",0),"edx");# 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &comment(""); 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &add($a,32); 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &add($r,64); 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &sub($num,8); 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &jnz(&label("sw_loop")); 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &set_label("sw_finish",0); 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov($num,&wparam(2)); # get num 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &and($num,7); 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &jz(&label("sw_end")); 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for ($i=0; $i<7; $i++) 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &comment("Tail Round $i"); 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov("eax",&DWP($i*4,$a,"",0)); # *a 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project # XXX 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mul("eax"); # *a * *a 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov(&DWP($i*8,$r,"",0),"eax"); # 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &dec($num) if ($i != 7-1); 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &mov(&DWP($i*8+4,$r,"",0),"edx"); 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &jz(&label("sw_end")) if ($i != 7-1); 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &set_label("sw_end",0); 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project &function_end($name); 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project1; 61