mirror of https://github.com/openssl/openssl.git
				
				
				
			AESNI perlasm update.
This commit is contained in:
		
							parent
							
								
									75d448dde4
								
							
						
					
					
						commit
						6c8b9259fc
					
				|  | @ -662,6 +662,7 @@ while($line=<>) { | |||
| 		$insn = $opcode->out($#args>=1?$args[$#args]->size():$sz); | ||||
| 	    } else { | ||||
| 		$insn = $opcode->out(); | ||||
| 		$insn .= $sz if (map($_->out() =~ /xmm|mmx/,@args)); | ||||
| 		@args = reverse(@args); | ||||
| 		undef $sz if ($nasm && $opcode->mnemonic() eq "lea"); | ||||
| 	    } | ||||
|  |  | |||
|  | @ -80,6 +80,23 @@ sub ::movq | |||
|     {	&::generic("movq",@_);			} | ||||
| } | ||||
| 
 | ||||
| # AESNI extenstion | ||||
| sub ::aeskeygenassist | ||||
| { my($dst,$src,$imm)=@_; | ||||
|     if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) | ||||
|     {	&data_byte(0x66,0x0f,0x3a,0xdf,0xc0|($1<<3)|$2,$imm);	} | ||||
| } | ||||
| sub ::aescommon | ||||
| { my($opcodelet,$dst,$src)=@_; | ||||
|     if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) | ||||
|     {	&data_byte(0x66,0x0f,0x38,$opcodelet,0xc0|($1<<3)|$2);	} | ||||
| } | ||||
| sub ::aesimc		{ ::aescommon(0xdb,@_); } | ||||
| sub ::aesenc		{ ::aescommon(0xdc,@_); } | ||||
| sub ::aesenclast	{ ::aescommon(0xdd,@_); } | ||||
| sub ::aesdec		{ ::aescommon(0xde,@_); } | ||||
| sub ::aesdeclast	{ ::aescommon(0xdf,@_); } | ||||
| 
 | ||||
| # label management | ||||
| $lbdecor="L";		# local label decoration, set by package | ||||
| $label="000"; | ||||
|  |  | |||
|  | @ -16,9 +16,11 @@ sub ::generic | |||
|     # fix hexadecimal constants | ||||
|     for (@arg) { s/0x([0-9a-f]+)/0$1h/oi; } | ||||
| 
 | ||||
|     # fix xmm references | ||||
|     $arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i); | ||||
|     $arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i); | ||||
|     if ($opcode !~ /movq/) | ||||
|     {	# fix xmm references | ||||
| 	$arg[0] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[1]=~/\bxmm[0-7]\b/i); | ||||
| 	$arg[1] =~ s/\b[A-Z]+WORD\s+PTR/XMMWORD PTR/i if ($arg[0]=~/\bxmm[0-7]\b/i); | ||||
|     } | ||||
| 
 | ||||
|     &::emit($opcode,@arg); | ||||
|   1; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue