mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-25 03:49:22 +02:00
* x86 AT&T reader and writer: cleaned up usage of attsufMM suffix:
* It is now only used to select size of vector instructions (i.e. 128 or 256 bits) * Scalar instructions reverted to use attsufINT suffix (selecting between 32 or 64 bits). * Additionally, vcvtsi2sd and vcvtsi2ss with rm64 operand are x86_64 only. git-svn-id: trunk@34942 -
This commit is contained in:
parent
3b665ddea2
commit
870fda34d5
@ -411,7 +411,7 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
@ -528,7 +528,7 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
@ -708,8 +708,8 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufMM,
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from x86ins.dat }
|
{ don't edit, this file is generated from x86ins.dat }
|
||||||
1953;
|
1951;
|
||||||
|
@ -8981,13 +8981,6 @@
|
|||||||
code : #220#242#248#1#42#61#80;
|
code : #220#242#248#1#42#61#80;
|
||||||
flags : if_avx or if_sandybridge or if_sd
|
flags : if_avx or if_sandybridge or if_sd
|
||||||
),
|
),
|
||||||
(
|
|
||||||
opcode : A_VCVTSI2SD;
|
|
||||||
ops : 3;
|
|
||||||
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
|
||||||
code : #220#242#243#248#1#42#61#80;
|
|
||||||
flags : if_avx or if_sandybridge
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
opcode : A_VCVTSI2SS;
|
opcode : A_VCVTSI2SS;
|
||||||
ops : 3;
|
ops : 3;
|
||||||
@ -8995,13 +8988,6 @@
|
|||||||
code : #219#242#248#1#42#61#80;
|
code : #219#242#248#1#42#61#80;
|
||||||
flags : if_avx or if_sandybridge or if_sd
|
flags : if_avx or if_sandybridge or if_sd
|
||||||
),
|
),
|
||||||
(
|
|
||||||
opcode : A_VCVTSI2SS;
|
|
||||||
ops : 3;
|
|
||||||
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
|
||||||
code : #219#242#243#248#1#42#61#80;
|
|
||||||
flags : if_avx or if_sandybridge
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
opcode : A_VCVTSS2SD;
|
opcode : A_VCVTSS2SD;
|
||||||
ops : 3;
|
ops : 3;
|
||||||
|
@ -411,7 +411,7 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
@ -528,7 +528,7 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
@ -708,8 +708,8 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufMM,
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from x86ins.dat }
|
{ don't edit, this file is generated from x86ins.dat }
|
||||||
1985;
|
1983;
|
||||||
|
@ -9009,13 +9009,6 @@
|
|||||||
code : #220#242#248#1#42#61#80;
|
code : #220#242#248#1#42#61#80;
|
||||||
flags : if_avx or if_sandybridge or if_sd
|
flags : if_avx or if_sandybridge or if_sd
|
||||||
),
|
),
|
||||||
(
|
|
||||||
opcode : A_VCVTSI2SD;
|
|
||||||
ops : 3;
|
|
||||||
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
|
||||||
code : #220#242#243#248#1#42#61#80;
|
|
||||||
flags : if_avx or if_sandybridge
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
opcode : A_VCVTSI2SS;
|
opcode : A_VCVTSI2SS;
|
||||||
ops : 3;
|
ops : 3;
|
||||||
@ -9023,13 +9016,6 @@
|
|||||||
code : #219#242#248#1#42#61#80;
|
code : #219#242#248#1#42#61#80;
|
||||||
flags : if_avx or if_sandybridge or if_sd
|
flags : if_avx or if_sandybridge or if_sd
|
||||||
),
|
),
|
||||||
(
|
|
||||||
opcode : A_VCVTSI2SS;
|
|
||||||
ops : 3;
|
|
||||||
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
|
||||||
code : #219#242#243#248#1#42#61#80;
|
|
||||||
flags : if_avx or if_sandybridge
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
opcode : A_VCVTSS2SD;
|
opcode : A_VCVTSS2SD;
|
||||||
ops : 3;
|
ops : 3;
|
||||||
|
@ -347,39 +347,7 @@ interface
|
|||||||
(getregtype(taicpu(hp).oper[0]^.reg)=R_FPUREGISTER)
|
(getregtype(taicpu(hp).oper[0]^.reg)=R_FPUREGISTER)
|
||||||
) then
|
) then
|
||||||
begin
|
begin
|
||||||
if (gas_needsuffix[op] = AttSufMM)then
|
owner.writer.AsmWrite(gas_opsize2str[taicpu(hp).opsize]);
|
||||||
begin
|
|
||||||
for i:=0 to taicpu(hp).ops-1 do
|
|
||||||
begin
|
|
||||||
|
|
||||||
if (taicpu(hp).oper[i]^.typ = top_ref) then
|
|
||||||
begin
|
|
||||||
case taicpu(hp).oper[i]^.ot and OT_SIZE_MASK of
|
|
||||||
OT_BITS32: begin
|
|
||||||
owner.writer.AsmWrite(gas_opsize2str[S_L]);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
OT_BITS64: begin
|
|
||||||
owner.writer.AsmWrite(gas_opsize2str[S_Q]);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
OT_BITS128: begin
|
|
||||||
owner.writer.AsmWrite(gas_opsize2str[S_XMM]);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
OT_BITS256: begin
|
|
||||||
owner.writer.AsmWrite(gas_opsize2str[S_YMM]);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
0: begin
|
|
||||||
owner.writer.AsmWrite(gas_opsize2str[taicpu(hp).opsize]);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else owner.writer.AsmWrite(gas_opsize2str[taicpu(hp).opsize]);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ process operands }
|
{ process operands }
|
||||||
|
@ -63,7 +63,7 @@ interface
|
|||||||
'','BW','BL','WL','BQ','WQ',{'LQ',}'B','W','L','S','Q','T','X','Y'
|
'','BW','BL','WL','BQ','WQ',{'LQ',}'B','W','L','S','Q','T','X','Y'
|
||||||
);
|
);
|
||||||
att_sizesuffix : array[0..13] of topsize = (
|
att_sizesuffix : array[0..13] of topsize = (
|
||||||
S_NO,S_BW,S_BL,S_WL,S_BQ,S_WQ,{S_LQ,}S_B,S_W,S_L,S_NO,S_Q,S_NO,S_XMM,S_YMM
|
S_NO,S_BW,S_BL,S_WL,S_BQ,S_WQ,{S_LQ,}S_B,S_W,S_L,S_NO,S_Q,S_NO,S_NO,S_NO
|
||||||
);
|
);
|
||||||
att_sizefpusuffix : array[0..13] of topsize = (
|
att_sizefpusuffix : array[0..13] of topsize = (
|
||||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_FL,S_FS,S_NO,S_FX,S_NO,S_NO
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_FL,S_FS,S_NO,S_FX,S_NO,S_NO
|
||||||
@ -71,6 +71,9 @@ interface
|
|||||||
att_sizefpuintsuffix : array[0..13] of topsize = (
|
att_sizefpuintsuffix : array[0..13] of topsize = (
|
||||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO,S_NO,S_NO
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO,S_NO,S_NO
|
||||||
);
|
);
|
||||||
|
att_sizemmsuffix : array[0..13] of topsize = (
|
||||||
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM
|
||||||
|
);
|
||||||
{$else x86_64}
|
{$else x86_64}
|
||||||
gas_opsize2str : array[topsize] of string[2] = ('',
|
gas_opsize2str : array[topsize] of string[2] = ('',
|
||||||
'b','w','l','q','bw','bl','wl',
|
'b','w','l','q','bw','bl','wl',
|
||||||
@ -87,7 +90,7 @@ interface
|
|||||||
'','BW','BL','WL','B','W','L','S','Q','T','X','Y'
|
'','BW','BL','WL','B','W','L','S','Q','T','X','Y'
|
||||||
);
|
);
|
||||||
att_sizesuffix : array[0..11] of topsize = (
|
att_sizesuffix : array[0..11] of topsize = (
|
||||||
S_NO,S_BW,S_BL,S_WL,S_B,S_W,S_L,S_NO,S_NO,S_NO,S_XMM,S_YMM
|
S_NO,S_BW,S_BL,S_WL,S_B,S_W,S_L,S_NO,S_NO,S_NO,S_NO,S_NO
|
||||||
);
|
);
|
||||||
att_sizefpusuffix : array[0..11] of topsize = (
|
att_sizefpusuffix : array[0..11] of topsize = (
|
||||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_FL,S_FS,S_NO,S_FX,S_NO,S_NO
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_FL,S_FS,S_NO,S_FX,S_NO,S_NO
|
||||||
@ -95,6 +98,10 @@ interface
|
|||||||
att_sizefpuintsuffix : array[0..11] of topsize = (
|
att_sizefpuintsuffix : array[0..11] of topsize = (
|
||||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO,S_NO,S_NO
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO,S_NO,S_NO
|
||||||
);
|
);
|
||||||
|
att_sizemmsuffix : array[0..11] of topsize = (
|
||||||
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM
|
||||||
|
);
|
||||||
|
|
||||||
{$endif x86_64}
|
{$endif x86_64}
|
||||||
|
|
||||||
|
|
||||||
|
@ -918,6 +918,8 @@ Implementation
|
|||||||
actopsize:=att_sizefpusuffix[sufidx]
|
actopsize:=att_sizefpusuffix[sufidx]
|
||||||
else if gas_needsuffix[actopcode]=attsufFPUint then
|
else if gas_needsuffix[actopcode]=attsufFPUint then
|
||||||
actopsize:=att_sizefpuintsuffix[sufidx]
|
actopsize:=att_sizefpuintsuffix[sufidx]
|
||||||
|
else if gas_needsuffix[actopcode]=attsufMM then
|
||||||
|
actopsize:=att_sizemmsuffix[sufidx]
|
||||||
else
|
else
|
||||||
actopsize:=att_sizesuffix[sufidx];
|
actopsize:=att_sizesuffix[sufidx];
|
||||||
{ only accept suffix from the same category that the opcode belongs to }
|
{ only accept suffix from the same category that the opcode belongs to }
|
||||||
@ -942,11 +944,9 @@ Implementation
|
|||||||
if Cond=Upper(cond2str[cnd]) then
|
if Cond=Upper(cond2str[cnd]) then
|
||||||
begin
|
begin
|
||||||
actopcode:=CondASmOp[j];
|
actopcode:=CondASmOp[j];
|
||||||
if gas_needsuffix[actopcode]=attsufFPU then
|
{ conditional instructions (cmovcc, setcc) use only INT suffixes;
|
||||||
actopsize:=att_sizefpusuffix[sufidx]
|
other stuff like fcmovcc is represented as group of individual instructions }
|
||||||
else if gas_needsuffix[actopcode]=attsufFPUint then
|
if gas_needsuffix[actopcode]=attsufINT then
|
||||||
actopsize:=att_sizefpuintsuffix[sufidx]
|
|
||||||
else
|
|
||||||
actopsize:=att_sizesuffix[sufidx];
|
actopsize:=att_sizesuffix[sufidx];
|
||||||
{ only accept suffix from the same category that the opcode belongs to }
|
{ only accept suffix from the same category that the opcode belongs to }
|
||||||
if (actopsize<>S_NO) or (suflen=0) then
|
if (actopsize<>S_NO) or (suflen=0) then
|
||||||
|
@ -2224,7 +2224,7 @@ xmmreg,mmxrm \331\2\x0F\x2A\110 KATMAI,SSE,MMX
|
|||||||
mmxreg,mem64 \331\2\x0F\x2D\110 KATMAI,SSE,MMX
|
mmxreg,mem64 \331\2\x0F\x2D\110 KATMAI,SSE,MMX
|
||||||
mmxreg,xmmreg \331\2\x0F\x2D\110 KATMAI,SSE,MMX
|
mmxreg,xmmreg \331\2\x0F\x2D\110 KATMAI,SSE,MMX
|
||||||
|
|
||||||
[CVTSI2SS,cvtsi2ssM]
|
[CVTSI2SS,cvtsi2ssX]
|
||||||
(Ch_Wop2, Ch_Rop1, Ch_None)
|
(Ch_Wop2, Ch_Rop1, Ch_None)
|
||||||
xmmreg,rm32 \333\321\2\x0F\x2A\110 KATMAI,SSE
|
xmmreg,rm32 \333\321\2\x0F\x2A\110 KATMAI,SSE
|
||||||
xmmreg,rm64 \333\321\2\x0F\x2A\110 KATMAI,SSE,X86_64
|
xmmreg,rm64 \333\321\2\x0F\x2A\110 KATMAI,SSE,X86_64
|
||||||
@ -2761,7 +2761,7 @@ reg64,mem64 \334\320\2\x0F\x2D\110 WILLAMETTE,SSE2,X86_64
|
|||||||
xmmreg,xmmreg \334\2\x0F\x5A\110 WILLAMETTE,SSE2 ;,SQ
|
xmmreg,xmmreg \334\2\x0F\x5A\110 WILLAMETTE,SSE2 ;,SQ
|
||||||
xmmreg,mem64 \334\2\x0F\x5A\110 WILLAMETTE,SSE2 ;,SQ
|
xmmreg,mem64 \334\2\x0F\x5A\110 WILLAMETTE,SSE2 ;,SQ
|
||||||
|
|
||||||
[CVTSI2SD,cvtsi2sdM]
|
[CVTSI2SD,cvtsi2sdX]
|
||||||
(Ch_Wop2, Ch_Rop1, Ch_None)
|
(Ch_Wop2, Ch_Rop1, Ch_None)
|
||||||
xmmreg,rm32 \334\2\x0F\x2A\110 WILLAMETTE,SSE2
|
xmmreg,rm32 \334\2\x0F\x2A\110 WILLAMETTE,SSE2
|
||||||
xmmreg,rm64 \326\334\321\2\x0F\x2A\110 WILLAMETTE,SSE2,X86_64
|
xmmreg,rm64 \326\334\321\2\x0F\x2A\110 WILLAMETTE,SSE2,X86_64
|
||||||
@ -3652,15 +3652,15 @@ reg64,xmmreg \334\362\363\370\1\x2D\110 AVX,SA
|
|||||||
xmmreg,xmmreg,mem64 \334\362\370\1\x5A\75\120 AVX,SANDYBRIDGE
|
xmmreg,xmmreg,mem64 \334\362\370\1\x5A\75\120 AVX,SANDYBRIDGE
|
||||||
xmmreg,xmmreg,xmmreg \334\362\370\1\x5A\75\120 AVX,SANDYBRIDGE
|
xmmreg,xmmreg,xmmreg \334\362\370\1\x5A\75\120 AVX,SANDYBRIDGE
|
||||||
|
|
||||||
[VCVTSI2SD,vcvtsi2sdM]
|
[VCVTSI2SD,vcvtsi2sdX]
|
||||||
(Ch_Wop3, Ch_Rop2, Ch_Rop1)
|
(Ch_Wop3, Ch_Rop2, Ch_Rop1)
|
||||||
xmmreg,xmmreg,rm32 \334\362\370\1\x2A\75\120 AVX,SANDYBRIDGE,SD
|
xmmreg,xmmreg,rm32 \334\362\370\1\x2A\75\120 AVX,SANDYBRIDGE,SD
|
||||||
xmmreg,xmmreg,rm64 \334\362\363\370\1\x2A\75\120 AVX,SANDYBRIDGE
|
xmmreg,xmmreg,rm64 \334\362\363\370\1\x2A\75\120 AVX,SANDYBRIDGE,X86_64
|
||||||
|
|
||||||
[VCVTSI2SS,vcvtsi2ssM]
|
[VCVTSI2SS,vcvtsi2ssX]
|
||||||
(Ch_Wop3, Ch_Rop2, Ch_Rop1)
|
(Ch_Wop3, Ch_Rop2, Ch_Rop1)
|
||||||
xmmreg,xmmreg,rm32 \333\362\370\1\x2A\75\120 AVX,SANDYBRIDGE,SD
|
xmmreg,xmmreg,rm32 \333\362\370\1\x2A\75\120 AVX,SANDYBRIDGE,SD
|
||||||
xmmreg,xmmreg,rm64 \333\362\363\370\1\x2A\75\120 AVX,SANDYBRIDGE
|
xmmreg,xmmreg,rm64 \333\362\363\370\1\x2A\75\120 AVX,SANDYBRIDGE,X86_64
|
||||||
|
|
||||||
[VCVTSS2SD]
|
[VCVTSS2SD]
|
||||||
(Ch_Wop3, Ch_Rop2, Ch_Rop1)
|
(Ch_Wop3, Ch_Rop2, Ch_Rop1)
|
||||||
|
@ -396,7 +396,7 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
@ -513,7 +513,7 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufINT,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
@ -702,8 +702,8 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufMM,
|
attsufINT,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufMM,
|
attsufMM,
|
||||||
|
@ -9091,7 +9091,7 @@
|
|||||||
ops : 3;
|
ops : 3;
|
||||||
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
||||||
code : #220#242#243#248#1#42#61#80;
|
code : #220#242#243#248#1#42#61#80;
|
||||||
flags : if_avx or if_sandybridge
|
flags : if_avx or if_sandybridge or if_x86_64
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
opcode : A_VCVTSI2SS;
|
opcode : A_VCVTSI2SS;
|
||||||
@ -9105,7 +9105,7 @@
|
|||||||
ops : 3;
|
ops : 3;
|
||||||
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
optypes : (ot_xmmreg,ot_xmmreg,ot_rm_gpr or ot_bits64,ot_none);
|
||||||
code : #219#242#243#248#1#42#61#80;
|
code : #219#242#243#248#1#42#61#80;
|
||||||
flags : if_avx or if_sandybridge
|
flags : if_avx or if_sandybridge or if_x86_64
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
opcode : A_VCVTSS2SD;
|
opcode : A_VCVTSS2SD;
|
||||||
|
Loading…
Reference in New Issue
Block a user