diff options
| author | Jiong Wang <jiong.wang@netronome.com> | 2018-12-05 13:52:32 -0500 | 
|---|---|---|
| committer | Alexei Starovoitov <ast@kernel.org> | 2018-12-07 13:30:48 -0800 | 
| commit | f860203b010ab11995b3073a96cc0d04e520129e (patch) | |
| tree | e04fbf2c4b2daffea61f26509656da68fd73b430 /arch/s390 | |
| parent | 44cf43c04bb5f7c688608ff4136b13f2a8a7a129 (diff) | |
| download | linux-f860203b010ab11995b3073a96cc0d04e520129e.tar.bz2 | |
s390: bpf: implement jitting of BPF_ALU | BPF_ARSH | BPF_*
This patch implements code-gen for BPF_ALU | BPF_ARSH | BPF_*.
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Diffstat (limited to 'arch/s390')
| -rw-r--r-- | arch/s390/net/bpf_jit_comp.c | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index d7052cbe984f..3ff758eeb71d 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c @@ -821,10 +821,22 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i  	/*  	 * BPF_ARSH  	 */ +	case BPF_ALU | BPF_ARSH | BPF_X: /* ((s32) dst) >>= src */ +		/* sra %dst,%dst,0(%src) */ +		EMIT4_DISP(0x8a000000, dst_reg, src_reg, 0); +		EMIT_ZERO(dst_reg); +		break;  	case BPF_ALU64 | BPF_ARSH | BPF_X: /* ((s64) dst) >>= src */  		/* srag %dst,%dst,0(%src) */  		EMIT6_DISP_LH(0xeb000000, 0x000a, dst_reg, dst_reg, src_reg, 0);  		break; +	case BPF_ALU | BPF_ARSH | BPF_K: /* ((s32) dst >> imm */ +		if (imm == 0) +			break; +		/* sra %dst,imm(%r0) */ +		EMIT4_DISP(0x8a000000, dst_reg, REG_0, imm); +		EMIT_ZERO(dst_reg); +		break;  	case BPF_ALU64 | BPF_ARSH | BPF_K: /* ((s64) dst) >>= imm */  		if (imm == 0)  			break; |