VirtualBox

Changeset 66906 in vbox for trunk/src/VBox/ValidationKit


Ignore:
Timestamp:
May 16, 2017 9:58:00 AM (8 years ago)
Author:
vboxsync
Message:

IEM: Implemented vmovsd Vsd,Hsd,Usd (VEX.F2.0F 10 mod=3), vmovsd Vsd,Mq (VEX.F2.0F 10 mod!=3).

Location:
trunk/src/VBox/ValidationKit/bootsectors
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c

    r66901 r66906  
    197197         * Set to BS3CG1DST_INVALID if memory or immediate.  */
    198198        uint8_t             idxField;
     199        /** The base BS3CG1DST value for this field.
     200         * Used only by some generalized encoders when dealing with
     201         * registers. */
     202        uint8_t             idxFieldBase;
    199203        /** Depends on enmLocation.
    200204         * - BS3CG1OPLOC_IMM:       offset relative to start of the instruction.
     
    23862390
    23872391
    2388 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_Vss_WO_HdqCss_Wss(PBS3CG1STATE pThis, unsigned iEncoding)
     2392static unsigned Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_HdqCsomething_Usomething(PBS3CG1STATE pThis, unsigned iEncoding)
    23892393{
    23902394    unsigned off;
     
    23952399            off = Bs3Cg1InsertOpcodes(pThis, off);
    23962400            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1);
    2397             pThis->aOperands[0].idxField = BS3CG1DST_XMM2;
    2398             pThis->aOperands[1].idxField = BS3CG1DST_XMM0;
    2399             pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;
     2401            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2;
     2402            pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 0;
     2403            pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1;
    24002404            break;
    24012405        case 1:
     
    24032407            off = Bs3Cg1InsertOpcodes(pThis, off);
    24042408            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 3, 1);
    2405             pThis->aOperands[0].idxField = BS3CG1DST_XMM3;
    2406             pThis->aOperands[1].idxField = BS3CG1DST_XMM7;
    2407             pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;
     2409            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 3;
     2410            pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 7;
     2411            pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1;
    24082412            break;
    24092413        case 2:
     
    24142418                off = Bs3Cg1InsertOpcodes(pThis, off);
    24152419                pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 3, 2);
    2416                 pThis->aOperands[0].idxField = BS3CG1DST_XMM11;
    2417                 pThis->aOperands[1].idxField = BS3CG1DST_XMM15;
    2418                 pThis->aOperands[2].idxField = BS3CG1DST_XMM2_DW0;
     2420                pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 11;
     2421                pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 15;
     2422                pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 2;
    24192423                break;
    24202424            }
     
    24252429            off = Bs3Cg1InsertOpcodes(pThis, off);
    24262430            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1);
    2427             pThis->aOperands[0].idxField = BS3CG1DST_XMM2;
    2428             pThis->aOperands[1].idxField = BS3CG1DST_XMM0;
    2429             pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;
     2431            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2;
     2432            pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 0;
     2433            pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1;
    24302434            break;
    24312435        case 4:
     
    24332437            off = Bs3Cg1InsertOpcodes(pThis, off);
    24342438            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1);
    2435             pThis->aOperands[0].idxField = BS3CG1DST_XMM2;
    2436             pThis->aOperands[1].idxField = BS3CG1DST_XMM0;
    2437             pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;
     2439            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2;
     2440            pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 0;
     2441            pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1;
    24382442            break;
    24392443        case 5:
     
    24412445            off = Bs3Cg1InsertOpcodes(pThis, off);
    24422446            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1);
    2443             pThis->aOperands[0].idxField = BS3CG1DST_XMM2;
    2444             pThis->aOperands[1].idxField = BS3CG1DST_XMM3;
    2445             pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;
     2447            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2;
     2448            pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 3;
     2449            pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1;
    24462450            break;
    24472451        case 6:
     
    24492453            off = Bs3Cg1InsertOpcodes(pThis, off);
    24502454            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1);
    2451             pThis->aOperands[0].idxField = BS3CG1DST_XMM2;
    2452             pThis->aOperands[1].idxField = BS3_MODE_IS_64BIT_CODE(pThis->bMode) ? BS3CG1DST_XMM15 : BS3CG1DST_XMM7;
    2453             pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;
     2455            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2;
     2456            pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + (BS3_MODE_IS_64BIT_CODE(pThis->bMode) ? 15 : 7);
     2457            pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1;
     2458            break;
     2459        case 7:
     2460            off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0 /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/);
     2461            off = Bs3Cg1InsertOpcodes(pThis, off);
     2462            pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1);
     2463            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2;
     2464            pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + (BS3_MODE_IS_64BIT_CODE(pThis->bMode) ? 15 : 7);
     2465            pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1;
    24542466            break;
    24552467        default:
     
    24612473
    24622474
    2463 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_VssZx_WO_Wss(PBS3CG1STATE pThis, unsigned iEncoding)
     2475static unsigned Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_Msomething_Wip_Lig(PBS3CG1STATE pThis, unsigned iEncoding)
    24642476{
    24652477    unsigned off;
     
    24692481            off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/);
    24702482            off = Bs3Cg1InsertOpcodes(pThis, off);
    2471             off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, 4, 0, BS3CG1OPLOC_MEM);
    2472             pThis->aOperands[0].idxField = BS3CG1DST_XMM0_DW0;
     2483            off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2484            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 0;
    24732485            break;
    24742486        case 1:
    24752487            off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L - ignored*/, 1 /*~R*/);
    24762488            off = Bs3Cg1InsertOpcodes(pThis, off);
    2477             off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, 4, 0, BS3CG1OPLOC_MEM);
    2478             pThis->aOperands[0].idxField = BS3CG1DST_XMM7_DW0;
     2489            off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2490            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 7;
    24792491            break;
    24802492        case 2:
     
    24842496                off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L - ignored*/, 0 /*~R*/);
    24852497                off = Bs3Cg1InsertOpcodes(pThis, off);
    2486                 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, 4, 0, BS3CG1OPLOC_MEM);
    2487                 pThis->aOperands[0].idxField = BS3CG1DST_XMM15_DW0;
     2498                off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2499                pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 15;
    24882500                break;
    24892501            }
     
    24942506            off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xe /*~V*/, 0 /*L*/, 1 /*~R*/);
    24952507            off = Bs3Cg1InsertOpcodes(pThis, off);
    2496             off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, 4, 0, BS3CG1OPLOC_MEM);
    2497             pThis->aOperands[0].idxField = BS3CG1DST_XMM0_DW0;
     2508            off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2509            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 0;
    24982510            pThis->fInvalidEncoding = true;
    24992511            break;
     
    25012513            off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/);
    25022514            off = Bs3Cg1InsertOpcodes(pThis, off);
    2503             off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, 4, 0, BS3CG1OPLOC_MEM);
    2504             pThis->aOperands[0].idxField = BS3CG1DST_XMM1_DW0;
     2515            off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2516            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 1;
    25052517            break;
    25062518        case 5:
    25072519            off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L-ignored*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/);
    25082520            off = Bs3Cg1InsertOpcodes(pThis, off);
    2509             off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, 4, 0, BS3CG1OPLOC_MEM);
    2510             pThis->aOperands[0].idxField = BS3CG1DST_XMM1_DW0;
     2521            off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2522            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 1;
    25112523            break;
    25122524        case 6:
    25132525            off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 1 /*W-ignored*/);
    25142526            off = Bs3Cg1InsertOpcodes(pThis, off);
    2515             off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, 4, 0, BS3CG1OPLOC_MEM);
    2516             pThis->aOperands[0].idxField = BS3CG1DST_XMM5_DW0;
     2527            off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2528            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 5;
    25172529            break;
    25182530        case 7:
     
    25222534                off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 0 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/);
    25232535                off = Bs3Cg1InsertOpcodes(pThis, off);
    2524                 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, 4, 0, BS3CG1OPLOC_MEM);
    2525                 pThis->aOperands[0].idxField = BS3CG1DST_XMM13_DW0;
     2536                off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2537                pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 13;
    25262538                break;
    25272539            }
     
    25342546                off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 0 /*~B-ignored*/, 0 /*W*/);
    25352547                off = Bs3Cg1InsertOpcodes(pThis, off);
    2536                 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, 4, 0, BS3CG1OPLOC_MEM);
    2537                 pThis->aOperands[0].idxField = BS3CG1DST_XMM1_DW0;
     2548                off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2549                pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 1;
    25382550                break;
    25392551            }
     
    25462558                off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 0 /*~X-ignored*/, 1 /*~B*/, 0 /*W*/);
    25472559                off = Bs3Cg1InsertOpcodes(pThis, off);
    2548                 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2, 4, 0, BS3CG1OPLOC_MEM);
    2549                 pThis->aOperands[0].idxField = BS3CG1DST_XMM2_DW0;
     2560                off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2561                pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2;
    25502562                break;
    25512563            }
     
    25562568            off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0 /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/);
    25572569            off = Bs3Cg1InsertOpcodes(pThis, off);
    2558             off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, 4, 0, BS3CG1OPLOC_MEM);
    2559             pThis->aOperands[0].idxField = BS3CG1DST_XMM5_DW0;
     2570            off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM);
     2571            pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 5;
    25602572            pThis->fInvalidEncoding = true;
    25612573            break;
     
    27632775            return Bs3Cg1EncodeNext_VEX_MODRM_Vps_WO_Wps__OR__VEX_MODRM_Vpd_WO_Wpd(pThis, iEncoding);
    27642776
    2765         case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Wss:
    2766             return Bs3Cg1EncodeNext_VEX_MODRM_Vss_WO_HdqCss_Wss(pThis, iEncoding);
    2767 
     2777        case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Uss:
     2778        case BS3CG1ENC_VEX_MODRM_Vsd_WO_HdqCsd_Usd:
     2779            return Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_HdqCsomething_Usomething(pThis, iEncoding);
     2780
     2781        case BS3CG1ENC_VEX_MODRM_VsdZx_WO_Mq:
    27682782        case BS3CG1ENC_VEX_MODRM_VssZx_WO_Wss:
    2769             return Bs3Cg1EncodeNext_VEX_MODRM_VssZx_WO_Wss(pThis, iEncoding);
     2783            return Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_Msomething_Wip_Lig(pThis, iEncoding);
    27702784
    27712785        case BS3CG1ENC_VEX_MODRM_Md_WO:
     
    30193033            pThis->aOperands[0].cbOp = 4;
    30203034            pThis->aOperands[1].cbOp = 4;
    3021             pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX;
    3022             pThis->aOperands[1].enmLocation = BS3CG1OPLOC_MEM;
     3035            pThis->aOperands[0].enmLocation  = BS3CG1OPLOC_CTX_ZX_VLMAX;
     3036            pThis->aOperands[1].enmLocation  = BS3CG1OPLOC_MEM;
     3037            pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0_DW0;
     3038            pThis->aOperands[1].idxFieldBase = BS3CG1DST_INVALID;
    30233039            break;
    30243040
    3025         case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Wss:
     3041        case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Uss:
    30263042            pThis->iRegOp            = 0;
    30273043            pThis->iRmOp             = 2;
     
    30293045            pThis->aOperands[1].cbOp = 16;
    30303046            pThis->aOperands[2].cbOp = 4;
    3031             pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX;
    3032             pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX;
    3033             pThis->aOperands[2].enmLocation = BS3CG1OPLOC_CTX;
     3047            pThis->aOperands[0].enmLocation  = BS3CG1OPLOC_CTX_ZX_VLMAX;
     3048            pThis->aOperands[1].enmLocation  = BS3CG1OPLOC_CTX;
     3049            pThis->aOperands[2].enmLocation  = BS3CG1OPLOC_CTX;
     3050            pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0;
     3051            pThis->aOperands[1].idxFieldBase = BS3CG1DST_XMM0;
     3052            pThis->aOperands[2].idxFieldBase = BS3CG1DST_XMM0_DW0;
     3053            break;
     3054
     3055        case BS3CG1ENC_VEX_MODRM_VsdZx_WO_Mq:
     3056            pThis->iRmOp             = 1;
     3057            pThis->iRegOp            = 0;
     3058            pThis->aOperands[0].cbOp = 8;
     3059            pThis->aOperands[1].cbOp = 8;
     3060            pThis->aOperands[0].enmLocation  = BS3CG1OPLOC_CTX_ZX_VLMAX;
     3061            pThis->aOperands[1].enmLocation  = BS3CG1OPLOC_MEM;
     3062            pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0_LO;
     3063            pThis->aOperands[1].idxFieldBase = BS3CG1DST_INVALID;
     3064            break;
     3065
     3066        case BS3CG1ENC_VEX_MODRM_Vsd_WO_HdqCsd_Usd:
     3067            pThis->iRegOp            = 0;
     3068            pThis->iRmOp             = 2;
     3069            pThis->aOperands[0].cbOp = 16;
     3070            pThis->aOperands[1].cbOp = 16;
     3071            pThis->aOperands[2].cbOp = 8;
     3072            pThis->aOperands[0].enmLocation  = BS3CG1OPLOC_CTX_ZX_VLMAX;
     3073            pThis->aOperands[1].enmLocation  = BS3CG1OPLOC_CTX;
     3074            pThis->aOperands[2].enmLocation  = BS3CG1OPLOC_CTX;
     3075            pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0;
     3076            pThis->aOperands[1].idxFieldBase = BS3CG1DST_XMM0;
     3077            pThis->aOperands[2].idxFieldBase = BS3CG1DST_XMM0_LO;
    30343078            break;
    30353079
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h

    r66901 r66906  
    6262    BS3CG1OP_Gv_RO,
    6363    BS3CG1OP_HdqCss,
     64    BS3CG1OP_HdqCsd,
    6465    BS3CG1OP_Nq,
    6566    BS3CG1OP_Pq_WO,
    6667    BS3CG1OP_Uq,
    6768    BS3CG1OP_UqHi,
     69    BS3CG1OP_Uss,
     70    BS3CG1OP_Usd,
    6871    BS3CG1OP_Vss,
    6972    BS3CG1OP_Vss_WO,
     
    144147    BS3CG1ENC_VEX_MODRM_Vps_WO_Wps,
    145148    BS3CG1ENC_VEX_MODRM_Vpd_WO_Wpd,
    146     BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Wss,
     149    BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Uss,
    147150    BS3CG1ENC_VEX_MODRM_VssZx_WO_Wss,
     151    BS3CG1ENC_VEX_MODRM_Vsd_WO_HdqCsd_Usd,
     152    BS3CG1ENC_VEX_MODRM_VsdZx_WO_Mq,
    148153    BS3CG1ENC_VEX_MODRM_Md_WO,
    149154
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette