I am experimenting the `ecmul` opcode (inside the `EccMul` function) where I can multiply the given generator with the given number.

    pragma solidity ^0.8.0;
    
    contract TestEccMul {
       
        struct G1Point {
            uint X;
            uint Y;
        }
    
        struct G2Point {
            uint[2] X;
            uint[2] Y;
        }
    
        /// @return the generator of G1
        function P1() public pure returns (G1Point memory) {
            return G1Point(1, 2);
        }
        
        /// @return the generator of G2
        function P2() public pure returns (G2Point memory) {
            return G2Point(
                [535000198726010842494463887012728317008839985956991949449597676023059784793,
                50911955057697873758342946860545764866265758828426205386527214348449976128083],
    
                [34456506622601912613857833514763279459301076221556609925761869949091594580415,
                8211078999328499834214571830542910221251497399640112479758011117184688730247]
            );
            
        }
    
        function EccMul(uint s) public view returns (G1Point memory r) {
            uint[3] memory input;
            input[0] = P1().X;
            input[1] = P1().Y;
            input[2] = s;
    
            assembly {
                if iszero (staticcall(gas(), 0x07, input, 0x60, r, 0x40)) {
                    revert (0,0)
                }
            }
            return r;
        }
    }

The code perfectly works with the given generator (where `g1 = (1,2)` ); however, EVM reverts when I change the generator to any other coordinates. Why is this the case? Whats the point of this if I can't use other generators then the one defined in [EIP-197][1]. Am I missing something?


  [1]: https://eips.ethereum.org/EIPS/eip-197